4

私がこの構造を持っているとしましょう(クラスもIDもありません):-それは場所を見つける質問です

d[0,1,2]は純粋divsです。クラスなしIDなし。

div(d0)は、次のような繰り返し構造をラップします。

ここに画像の説明を入力してください

そして、私が最初$(this)に持っているとしましょう d1

他の2つを取得するためのトラバース関数、メソッド、ソリューションはありd1ますか?(またはすべてd1's。それは問題ではありません..)

私は言葉でそれを賞賛します:

私はです$(this)=d1。私には親(つまりd2、もっと多くの場合があります....これは私のサンプル用です)があり、親(d3)があります。したがって、私のような2つのより正確な要素があります。

どうすれば入手できますか?JSBIN

編集

はっきりしなかったかもしれませんが、構造を知る必要はありません。私はちょうど持っています、そしてそれは(その位置と同じように)$(this)相対的な他の双子をそれ自体で見つけるはずですd0

したがって、次のようになります。

function getLikeMyself(objWhichIsThis , contextDivElement)
{
}

execute : getLikeMyself(theDivWhishIsThis, divElemtnWhichIs_d0)
4

3 に答える 3

5

これは私の新しい試みであり、.me()までに構築された現在の要素のセレクターを返すメソッドですbody

$.fn.me = function(){
  return this.first().parentsUntil("body").andSelf().map(function(){
    return this.tagName;
  }).get().join(">");
};

使用法:

var selector = $(this).me();
var $twins = $(selector);

こちらをご覧ください。


ルート要素を引数として受け入れる代替バージョン:

$.fn.me = function(root){
  return this.first().parentsUntil(root).andSelf().map(function(){
    return this.tagName;
  }).get().join(">");
};

使用法:

var selector = $(this).me("#root");
var $twins = $(selector, "#root");

こちらをご覧ください。


ルート要素の下の最上位要素の子孫の相対位置を保持する3番目のバージョン。たとえばDIV>DIV:nth-child(1)>SPAN:nth-child(2)、汎用DIV>DIV>SPANセレクターの代わりに返されます。

$.fn.me = function(root){
  return this.first().parentsUntil(root).andSelf().map(function(){
    var eq = i ? ":nth-child(" + ($(this).index() + 1) + ")" : "";
    return this.tagName + eq;
  }).get().join(">");
};

使用法:

var selector = $(this).me("#root");
var $twins = $(selector, "#root");
于 2013-02-24T11:49:00.197 に答える
1

途中で構築されたパスを使用して、各親ノードを反復処理し、対応する兄弟に降りることができます。

var chain = [$('#imthis').prop('nodeName')];

$('#imthis')
  .parentsUntil('body')
  .each(function() {
    // i'm a parent
    $(this).siblings()
      .find(chain.join('>'))
    .each(function() {
      alert(this.textContent);
    });
    chain.unshift(this.nodeName);
  });

デモ

于 2013-02-24T11:48:44.667 に答える
1

再帰関数を使用して、body要素に到達するまでDOMを「バブルアップ」し、このツリーを逆にしてセレクターとして使用できます。少し似ています:

function getChain(el){

    var parents = arguments[1] || [el.nodeName.toLowerCase()];

    if (el.parentNode.nodeName != 'BODY'){

        parents.push(el.parentNode.nodeName.toLowerCase());
        el = el.parentNode;

        return getChain(el, parents);

    } else {

        return parents.reverse().join('>');

    }

}

デモフィドルを見る

于 2013-02-24T11:57:34.620 に答える