使用JQuery创建链接的最佳方法?

我们使用jqGrid自定义格式化程序在JQuery网格中输出链接。 我们只是使用String操作构建链接a:

var s = "This is blah"; 

有没有更“聪明”的方法来使用JQuery创建链接(和其他表单元素)?

正如Steven Xu正确提到的,插入HTML字符串比操作DOM更快,这就是为什么我建议使用字符串操作而不是jQuery创建元素。

你只需要改变这个:

 var s = "This is blah"; 

对此:

 var s = "This is blah"; 

(在字符串末尾用标记 )。

字符串操作比DOM操作快得多(例如,请参见此处)。 此外,如果您尝试在大型HTML代码的中间插入DOM片段,则差异会更大。 DOM DocumentFragments的使用可以略微提高性能,但字符串连接的使用是最快的方式。

所有其他答案在没有您使用它的上下文(jqGrid自定义格式化程序)的知识的情况下编写了他的答案。 我试着解释为什么它在你的情况下很重要。

由于性能优势,jqGrid首先为网格构建HTML代码片段作为字符串数组,然后根据.join('')从字符串数组构建一个字符串,并将结果插入到表格主体的末尾只要。 (我想你使用gridview:真正的 jqGrid选项几乎总是推荐)。 jqGrid自定义格式化程序是jqGrid在构建网格(表)主体时使用的回调函数。 自定义格式化程序必须将HTML代码片段作为结果返回字符串 。 该字符串将与构建网格主体(表)的其他字符串连接在一起。

因此,如果您将当前代码从纯字符串操作更改为jQuery DOM操作并将结果转换为字符串(需要作为自定义格式的结果返回),那么您的代码将运行缓慢,您将没有其他优势*。

使用字符串操作的唯一真正缺点是validation您构建的代码的问题。 例如,使用没有关闭标记的代码是您可能遇到的潜在问题。 在大多数情况下,问题将在插入DOM片段期间得到解决,但有时您可能会遇到实际问题。 所以你应该仔细测试你插入的代码。

还有一点:如果您想要遵循不引人注目的JavaScript样式 ,可以使用“#”作为href属性的值,并在gridCompleteloadComplete事件处理程序中绑定相应的click事件。 如果您在执行此操作时遇到问题,可以打开一个新问题,我将尝试为您编写相应的代码示例。

注意:我认为最好的实现方式是使用onCellSelectonCellSelect ,而不是将click事件绑定到列中的每个元素。 我建议您阅读以下答案以获取详细信息: 这一个 , 另一个和另一个旧答案 。

我发现最好的

 $('',{ text: 'This is blah', title: 'Blah', href: '#', click: function(){ BlahFunc( options.rowId );return false;} }).appendTo('body'); 

http://www.jsfiddle.net/gaby/RhWgf/上的 实例

我用附加的处理程序替换了内联javascript

关于jQuery()的文档引用

jQueryhtmlprops

html定义单个独立HTML元素的字符串(例如

)。
props要在新创建的元素上调用的属性,事件和方法的映射。


更新

如果你想要链接的实际文本,你应该将它包装在div中并返回.html()

或者:您可以使用访问原始元素的.outerHTML属性

http://www.jsfiddle.net/gaby/RhWgf/1/上的 完整示例删除了单击处理程序,因为它会在字符串版本中丢失,并将其替换为针对特定类型链接的live处理程序

 jQuery('').attr('href', 'url').text('blah') 

将创建一个jquery对象,然后您可以使用.append将其添加到dom中。

通常,插入HTML字符串更快,多个DOM注入和DOM操作,这就是这个jQuery DOM操作所达到的。 如果要插入其中的500个,那么性能方面的最佳选择是准备HTML字符串然后附加HTML。

但为了您的简单目的,您当前的选择将适合您。 对于聪明的人,您可以在新元素上使用jQuery的DOM操作库。 下面的例子应该是不言自明的,但如果我不清楚某个特定的是,请发表评论,我会帮助你。

 var toBeAdded = [ { title: "one", row: 1, content: "ONE" }, { title: "two", row: 2, content: "TWO" }, { title: "three", row: 3, content: "THREE" } ]; var s = toBeAdded.length; for(i=0;i'); a.attr('title', toBeAdded[i].title); a.attr('rel', toBeAdded[i].row); a.text(toBeAdded[i].content); a.addClass('blah_class'); a.appendTo($('body')); } 

然后在你的通用脚本中:

 $('a.blah_class').live('click', function(){ var rel = $(this).attr('rel'); BlahFunc(rel); });