如何使用Jquery遍历dom

时间:2012-06-03 04:45:19

标签: jquery

如果我有这个:

<h1>or if the title before doesn't exist then this title</h1>
<div>
  <h2>this title</h2>
  <span id="something">
    some other stuff
  </span>
  <span id="this">
    I am here
  </span>
</div>
<h2>Not this title</h2>

据我所知,$(':header')应找到标题。我需要它从$('#this')向上找到第一个标题。

4 个答案:

答案 0 :(得分:3)

它很可怕,但它适用于任何级别的嵌套:

var $this = $('#this');

$this.add($this.parents()).map(function() {
  return $(this).prevAll(':header').eq(0);
}).get().pop();

展开:

$this.add(
  $this.parents()        // Adds $this's parents to the current selecor
).map(function() {       // Iterates over the selector
  return $(this)         // Returns each element's
    .prevAll(':header')  // Closest sibling header, vertically
    .eq(0);              // The first one
})
.get()                   // Gets the array from the jQuery object
.pop();                  // Trick for getting the last element

演示:http://jsfiddle.net/xtQ2M/5/ (尝试删除内容)

答案 1 :(得分:1)

var headers = $('#this')
        .prevAll(':header')  // all header within parent of `#this`
        .add($('#this')
                      .parent() // go to parent of `#this`
                       .prev(':header') // got the header out of `#this` parent
          );  // output [h1, h2];

<强> DEMO

要获取h1,请使用headers[0];

要获取h2,请使用headers[1];

也可以使用

$('#this')
         .prevAll(':header')  // all header within parent of `#this`
         .add($('#this')
                        .parent() // go to parent of `#this`
                        .prev(':header') // got the header out of `#this` parent
          ).
          .eq(0); // output: h1, if you use .eq(2) will get h2

答案 2 :(得分:0)

您应该可以使用$(this).closest('h2');$(this).closest('header');很难说明您的示例代码。有关详细信息,请参阅jQuery.closest()

答案 3 :(得分:0)

如果您希望将来更改逻辑的某些部分,这似乎是一种非常易读的方法:

var target = $('#this'),
    closestHeader = target.siblings(':header');

while (!closestHeader.length) {
    target = target.parent();
    closestHeader = target.siblings(':header');
}
closestHeader = closestHeader[0];

注意:如果页面上完全没有标题,这将会卡住,因此您可能需要首先添加一个检查。

See demo