在循环中,我使用
将单个单词附加到元素$(".somediv").append(wordArray[i]+" ");
在单词数组中,有一些<p>
和</p>
标记。如果添加它们,jQuery似乎会自动使用</p>
关闭它们。
我怎样才能防止它这样做?
答案 0 :(得分:4)
你不附加带有jquery的标签,你追加节点。您正在操作的文档不是<html><head><title>T</title></head><body><div id="D"><p>P</p></div></body></html>
之类的字符串。这是一棵树
HTML Element
+---HEAD Element
| `---TITLE Element
| `---Text node, contents: "T"
`---BODY Element
`---DIV Element, attributes: "id" => "D"
`---P Element
`---Text node, contents: "P"
无法在树中表示“未关闭的标记”或“未完成的元素”。只有完整的元素才能存在。
旧的document.write
方法作为字符串对文档进行操作,它可以附加任意片段,但是significant disadvantages to its use.从DOM-level-0“标记思维”转换为现代DOM“树思维“是使用jquery的先决条件。
您需要决定树在添加开始标记的时间与添加结束标记的时间之间的间隔。这里有一个可能的答案:添加隐式结束标记,然后在每次追加时从头开始重建字符串,如下所示:
$(".somediv").html(wordArray.slice(0,i+1).join(" "));
如果wordArray
为["foo","<p>","bar","baz","</p>","quux"]
,那么循环将如下所示:
i string passed to html() equivalent HTML with all tags shown
0 "foo" "foo"
1 "foo <p>" "foo<p></p>"
2 "foo <p> bar" "foo<p>bar</p>"
3 "foo <p> bar baz" "foo<p>bar baz</p>"
4 "foo <p> bar baz </p>" "foo<p>bar baz</p>"
5 "foo <p> bar baz </p> quux" "foo<p>bar baz</p>quux"
请注意,添加输入中的</p>
后,它无效。并且<p>
的添加也没有太多明显的效果。因此,如果wordArray
的每个元素都包含一些文字,可能会更好:["foo","<p>bar","baz</p>","quux"]
它看起来有点kludgy,但这就是你尝试使用不完整的HTML元素作为输入格式所得到的! 树思维! 未来!
答案 1 :(得分:0)
append()
方法不像字符串连接那样工作...当传递新元素标记时,它会创建一个新元素及其结束标记
如果要在循环中追加内容,可以尝试(如果你没有在循环中进行任何其他操作)
$(".somediv").append(wordArray.join(" "));