jQuery元素构造函数 - 这是推荐的方式?

jQuery元素构造函数 - 这是推荐的方式?

问题描述:

当您创建的HTML传递到jQuery的元素,有一些可以使用的格式,例如:jQuery元素构造函数 - 这是推荐的方式?

$("<span>").addClass("foo") 
$("<span class=\"foo\"></span>") 

等等

有一个风格,工作比别人做得更好?

我以前认为没有什么区别,但我一直在寻找这HKS张贴在this other question代码,而事实证明,在IE一些不一致的地方。为了调查,我放了一张桌子。

在这里的结果看看: http://fisher.spadgos.com/stuff/jqueryConstructors.html

基本上它是这样的事情:

$('<a class="foo">').length; // in firefox, this == 1. IE, this == 0 

$('<br></br>').length; // Firefox == 1; IE == 2 

在IE它非常不一致,但在Firefox和Chrome的所有形式的工作得很好。

这是在所有浏览器一致的唯一方法是这些:

$("<foo />") $("<foo>") 

the manual

创建DOM元素从原始的HTML所提供的字符串上即时。

简单元素,而属性,例如,"<div />",经由document.createElement创建。通过将字符串分配给div元素的.innerHTML属性来分析所有其他情况。 HTML字符串不能包含div内无效的元素,例如html,head,body或title元素。

所有HTML必须是良好的,否则它可能无法在所有浏览器正常工作。这包括$("<span>")可能无法正常工作,但$("<span/>")将会(注意XML样式的斜杠)。

+3

你越来越不可预测的结果,因为你使用的HTML格式不正确。
是不正确的HTML 4.并且您的锚点未关闭。这就是说,它可能仍然是一个错误,但畸形的性质很大程度上使结果无效。 – cletus 2009-08-25 04:29:40

+0

是的,但如果你这样做:'$( “”)',然后,将工作。我只是表明在IE中结果有点不可预测。 – nickf 2009-08-25 04:33:58

+0

看起来像你看到的是浏览器如何“清理”格式不正确的HTML。他们这样做的方式不同,这是使用“适当”标记的重要原因之一。如果他们处理不同的文档类型,他们也可能做不同的处理; “怪癖模式”就是其中之一,但它确实更复杂。 不遵守jQuery的文档的指导方针可以创造一些非常讨厌的错误,因为你的HTML可以让你重新编写的。这会导致Ajax页面在不同浏览器中以奇怪的方式破解。 – ndp 2009-08-25 15:12:08

我不能肯定地说,但性能明智的第二个选项:

$("<span class=\"foo\"></span>"); 

一般比较好,因为没有多余的字符串连接(即加入了“类=‘富’”为匹配span标签

您还可以使用默认的FF/IE/OPERA/ETC源查看器在源代码中查看它,而您需要查看DOM的实时视图以查看结果这个:

$("<span>").addClass("foo") 

选择第二个选项 - 静态HTML携带一个小的性能优势,但更重要的是严重的可读性好处,这将帮助你,当你最终击中“查看源文件”,试图找出原因,根据需要您的元素没有显示出来。

首先创建一个像一个div元素如下:

<div id="test"></div> 

然后,你可以很容易地做到这一点使用下面的代码:

$("<span class=\"foo\"></span>").appendTo("div#test"); 

您也可以使用任何其他HTML元素,如表代替的div。

希望这会帮助你。

+0

按预期在IE对于未被预期具有结束标记元素不工作:'区域,BR,山口,小时,IMG,输入,链接,间位,PARAM,title'。是的,你可以忽略结束标签,但使用短版本更安全。 – nickf 2009-08-25 11:28:21

鉴于您的实际问题是关于风格,这是首选我已经把答案为“既不是”和扔下一个真棒插件,我发现最近,做维护HTML和JavaScript的分离 - 的出色的工作。该插件被称为tempest