1

私がこれを持っている場合:

<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

4 に答える 4

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/(削除してみてください)

于 2012-06-03T04:46:17.297 に答える
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];

デモ

を取得するには、 ;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
于 2012-06-03T05:11:20.827 に答える
0

使用できるはずです$(this).closest('h2');または$(this).closest('header');サンプルコードで判断するのは難しいです。詳細については、 jQuery.closest()を参照してください。

于 2012-06-03T05:28:35.470 に答える
0

これは、将来ロジックの一部を変更したい場合に備えて、かなり読みやすい方法のようです。

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

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

注: ページにヘッダーがまったくない場合、これはスタックするため、最初にヘッダーのチェックを追加することをお勧めします。

デモを見る

于 2012-06-03T05:34:41.293 に答える