jQuery与普通javascript:构建DOM树时append和appendChild之间的差异
我问了一个关于为标题解析文档和创建嵌套dom结构的问题(通过和无序列表)
如何为任何标题稳健地解析文档并构建仅仅那些标题的
- 树
在第二个答案中,提出了一个解决方案以及一个小提琴: http : //jsfiddle.net/fA4EW/
解决方案很接近,但似乎不适用于包含引号属性的元素,所以我试图在jQuery中重构它http://jsfiddle.net/funkyeah/s8m2t/3/
我觉得我真的很接近使它工作但解决方法之间的差异
elm / li.appendChild和我的代码$ elm / li.append(它们似乎返回不同的值并以不同方式修改elm / $ elm对象)
do { li = elm.lastChild; if(li == null) li = elm.appendChild(document.createElement("li")); elm = li.appendChild(document.createElement("ul")); cnt++; } while(cnt < (curLv - lv)); } li = elm.appendChild(document.createElement("li")); // replace the next line with archor tags or whatever you want li.innerHTML = node.innerHTML;
append和appendChild之间的差异
嗯, jQuery变体更强大。 它还需要多个参数,类型为htmlString,jQuery集合或元素数组,甚至是回调函数。 如果要将元素插入多个父元素,它会自动克隆元素。 本机方法仅采用单个节点(或单个DocumentFragments)。
他们似乎回归不同的价值观
是。 .append()
返回上下文jQuery集合(它附加到它),而.appendChild
返回附加元素。
这似乎是您的代码中的问题,天真的转换会导致不同的li
值。 如果你确实需要让孩子回来(有更简单的解决方案),你可能会看看.appendTo
方法 。
并以不同方式修改elm / $ elm对象
不,他们没有。 两者都将附加元素放在父级子集合的末尾。 您可能在设置返回值的innerHTML
值时遇到问题,这不是您所期望的(参见上文)。