2012-04-12 10 views
0

私は次のようなHTMLがあります。はJQuery:ネストされた要素の最後の子カプセル化する親

//'[popup]' hook nested at random depths, using <ul> or <ol>, no classes or id's 
<ol> 
    <li>Blah</li> 
    <li>Blah</li> 
    <li>Foo 
     <ol> 
      <li>[popup]Bar</li> 
     </ol> 
    </li> 
</ol> 

を私はポップ/ N、[popup]フックを対象とし、ポップアップのその<li>クラスを与えることを望みます。私はその後、その親に(Foo)<li>の矢印、arr/nの異なるクラスを与えたいと思っています。

var num = 0; 

//Find [popup] instances, increment the number 
$("li:contains('[popup]') li:last-child").each(function() { 
    var nextnumber = num++; 

    //add a general and a unique class to the list item containing the hook 
    $(this).addClass('popup' + ' ' + 'pop' + nextnumber); 

    //Get the parent list item, and give it general and unique classes also. 
    $thisArrow = $(this).parent().parent(); 
    $thisArrow.addClass('arrow' + ' ' + 'arr' + nextnumber); 

}); 

それを越えて深くはなく、1つのレベルのネストされたターゲットに対して何の問題も作業していない。ここで

はコードです。ターゲットは、以下の2つのレベルの深いネストされているリストが表示されたら、次のことが起こる:

<ol> 
    <li>Blah</li> 
    <li class="popup pop1 arrow arr1">Blah 
     <ol> 
      <li class="arrow arr0">Foo 
       <ol> 
        <li class="popup pop0">[popup]Bar</li> 
       </ol> 
      </li> 
      <li class="arrow arr2">Foo 
       <ol> 
        <li class="popup pop2">[popup]Bar</li> 
       </ol> 
      </li> 
     </ol> 
    </li> 
</ol> 

あなたはそれを見ることができ、最後の(リストでは常に最後のoccurance)を1回:最後の子要素に達しました、何らかの形でその親の親にターゲットと親の両方のクラスが与えられた場合、、次にクラスが追加されました。

誰かが私のエラーを指摘できれば、私はとても感謝しています。

(私は同じ結果に.parents().eq(1);代わりの.parent().parent()を試してみました。)

+0

:-)問題を理解していなかった場合、あなたが望んでいた結果を投稿しようとすることができ、私たちは何をあなたにそれを比較することができますを教えDO得た。あなたが達成したいことをちょっと混乱させました。あなたのソースでJsFiddleを作成しました。http://jsfiddle.net/Jg9kv/ –

+0

@Marco Apologies - 実際の使用例です。セクションAは私が望むものであり、セクションDはターゲットが1レベル以上ネストされているときに起こっていることです。 http://databizsolutions.ie/contents/page.php?v=35&u=admin-videos#d – Eamonn

答えて

2

ない矢印の事を確信して100%、私はあなたの主な問題は、ネストされたLi含有量は、またの標的となるだろうということだったと思う:含まれてい

「[popup]で始まる」というテキストコンテンツをテストすると役立ちます。

var num = 0; 

//Find [popup] instances, increment the number 
$("li:contains('[popup]')").each(function() {  
    if($(this).text().indexOf("[popup]")==0){ 
    var nextnumber = num++; 
    $(this).addClass('popup' + ' ' + 'pop' + nextnumber); 
} 

});​ 

こちらをご覧ください:http://jsfiddle.net/r3wK4/

は私が

+0

それは素晴らしく、+1だけでなく、私はindexOfを認識していなかった - 問題を解決! – Eamonn

+0

スーパー!喜んで:-) – Steen

関連する問題