当我使用jQuery作为字符串创建嵌套DOM元素时会发生什么?

时间:2011-09-25 11:50:41

标签: jquery dom

当我使用以下内容时会发生什么,并且是否存在语义差异?

方法一:

var task = $('<li class="task"><header><h1></h1></header></li>')        
$('#backlog-tasks').append(task);

方法二:

var task = $('<li>').attr('class','task');
task.append('<header>');
.....

第二个问题:您是否赞成采用上述方法?

实施例

http://jsfiddle.net/Zwedh/2/

1 个答案:

答案 0 :(得分:0)

如jQuery文档中所述,方法1由浏览器解析,而方法2则不是。这在散文中很难找到,

  

... jQuery 使用浏览器的.innerHTML属性来解析传递的HTML 并将其插入当前文档中。在此过程中,某些浏览器会过滤掉某些元素,例如<html><title><head>元素。因此,插入的元素可能无法代表传递的原始字符串

但它绝对存在。 (强调我的。)

我倾向于使用方法2,原因如下:

  1. 不依赖于特定于浏览器的东西。 (见上文。)]
  2. 你不必担心引用引号 - jQuery会为你做这件事。
  3. 如果您需要用户定义属性的内容,该怎么办?
  4. 关于最后一个的更多信息。假设您需要根据用户输入设置某个元素的style(可能难以置信,但我想不出更好的例子)。

    方法1

    $("<p style='" + input + "'>")
    

    现在考虑一下input ' onclick="$.ajax(/* some evil parameters */)" data-dummy='。 (或者我相信你可以想到更糟。)不是最令人向往的事情。

    方法2

    $("<p>").attr("style", input)
    

    好多了。