0

私はこのリストを持っています、そして私はリンクがクリックされたときにjqueryからli要素を選択したいです

<ul>
    <li><a class="accordion" href="#">1</a></li>    
    <li><a class="accordion" href="#">2</a></li>    
    <li><a class="accordion" href="#">3</a></li>    
    <li><a class="accordion" href="#">4</a></li>    
    <li><a class="accordion" href="#">5</a></li>    
    <li><a class="accordion" href="#">6</a></li>    
</ul>

私はこのjqueryコードを書きます

 $('a.accordion').click(function() {
      var href = $(this).attr("href");
      div = $('<div/>', {
         id: 'intotheli',
         style: {width:200}
      });
      //console.log(div);

      // loading content  with ajax custom function  
      div.html( loadcontent(div,$(this).attr("href"))); 
      // on this point i want find the li tag that contain the clicked link
      div.slideDown('slow').appendTo($(this));                  

      return false;
});

$(this)の.next()とprev()を試しましたが、問題が解決しません(間違って使用した可能性があります)

前もって感謝します。

4

2 に答える 2

2

あなたはこれに慣れていないように見えるので、これを書き直す方法は次のとおりです。

<ul class="accordion">
    <li><a href="#">1</a></li>    
    <li><a href="#">2</a></li>    
    <li><a href="#">3</a></li>    
    <li><a href="#">4</a></li>    
    <li><a href="#">5</a></li>    
    <li><a href="#">6</a></li>    
</ul>

これにより、マークアップがより小さく、よりきれいになります。

次に、代わりに:

$('a.accordion').click(function() {

私は使用します:

$('.accordion').on("click", "a", function() {

これは、6つではなく1つのイベントハンドラーのみがバインドされることを意味しますが、物事を少しスピードアップしますが、やはり物事を単純に保ちます。この変更は、私の新しいマークアップでのみ機能します。

コードの残りの部分は$(this)そのまま機能しますが、クリックされたリンクを参照します。

liが含まれている要素を取得するにaは、を使用します$(this).parent('li')

于 2012-06-21T18:52:43.053 に答える
1

.next()兄弟を.prev()トラバースします。彼らは次/前の兄弟を取得します。から取得したい場合<li><a>、が必要です.parent

$('a.accordion').click(function() {
    var $li = $(this).parent('li');
});
于 2012-06-21T18:47:25.443 に答える