如果我有这个:
<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')
向上找到第一个标题。
答案 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];
注意:如果页面上完全没有标题,这将会卡住,因此您可能需要首先添加一个检查。