遍历DOM按顺序离开

时间:2012-08-15 18:54:49

标签: javascript html dom

我正在寻找最有效的遍历特定元素叶子的方法。例如:

<div id='root'>
  <ul>
    <li>One</li>
    <li>Two</li>
  </ul>
  <div>
    <p>Paragraph</p>
    <div>
      <b>
        <i>Text</i>
      </b>
      <u>Underline</u>
    </div>
  </div>
</div>

我应该得到一个数组:[<li>One</li>, <li>Two</li>, <p>Paragraph</p>, <i>Text</i>, <u>Underline</u>]。理想情况下,它将按此顺序排列。

2 个答案:

答案 0 :(得分:1)

不是那么优雅,但我认为这应该有效(如果允许jQuery):

$('#root *').filter(function() {
    return $(this).children().length === 0;
});

示范:http://jsfiddle.net/9nFQ8/1/

答案 1 :(得分:1)

普通的“旧”Javascript

(function() {
    var nodes = document.querySelectorAll("#root *"),
        result;

    result = [].slice.apply(nodes).filter(function(i) {
        return i.childNodes.length === 1 && i.firstChild.nodeType === 3;
    })

    console.log(result);
}())​

example