var s = "<a title=\"Blah\" href=\"javascript:BlahFunc('" + options.rowId + "')\">This is blah<a>";
使用JQuery创建链接(和其他表单元素)有更多“聪明”的方式吗?
解决方法
你只需要改变这个:
var s = "<a title=\"Blah\" href=\"javascript:BlahFunc('" + options.rowId + "')\">This is blah<a>";
到这个:
var s = "<a title=\"Blah\" href=\"javascript:BlahFunc('" + options.rowId + "')\">This is blah</a>";
字符串操作比DOM操作快得多(参见例如this)。此外,如果您尝试在大型HTML代码中插入DOM片段,那么区别将更大。 DOM DocumentFragments的使用可以稍微提高性能,但字符串连接的使用是最快的方式。
所有其他答案都没有了解您使用它的上下文(jqGrid自定义格式化程序)的知识。我试图解释为什么在你的情况下很重要。
由于性能优势,jqGrid首先将网格HTML代码片段作为字符串数组构建,然后根据.join(”)从字符串数组构建一个字符串,并将结果插入到表体中只要。 (我想你几乎总是推荐使用gridview:true jqGrid选项)。 jqGrid custom formatter是jqGrid在构建网格(表)体时使用的回调函数。自定义格式化程序必须作为结果返回HTML代码片段作为字符串。字符串将与构建网格(表)的主体的其他字符串连接。
因此,如果您将当前的代码从纯字符串操作更改为jQuery DOM操作,并将结果转换为字符串(需要作为自定义格式的结果返回),那么代码将会缓慢运行,您将无法获得其他优势*。
使用字符串操作的唯一真正的缺点是验证您构建的代码的问题。例如,没有关闭标签< / a>的代码的使用是一个潜在的问题,你可以拥有。在大多数情况下,问题将在插入DOM片段时解决,但有时您可能会收到真正的问题。所以你应该测试你插入的代码非常仔细。
再说一句:如果要跟随unobtrusive JavaScript style,可以使用“#”作为href属性的值,并将gridComplete或loadComplete事件处理程序中的相应点击事件绑定。如果您在执行此操作时遇到问题,您可以打开一个新问题,我将尝试为您编写相应的代码示例。
注意:我认为最好的实现方式是使用onCellSelect或beforeSelectRow,而不是将每个< a>列中的元素。我建议阅读以下答案,详细信息:this one,another one和one more old answer。