2013-05-09 25 views
5

jQuery selectorのみを使用して前の要素を選択する必要があります。jQueryセレクタを使用して前の要素を選択する

<li class="collapsable"> 
    <div class="hitarea collapsable-hitarea"></div> 
    <span id="devicelist" class="ankr">Device List</span> 
    <ul id="ultree"> 
     <li type="dev" device="/dev/sdh1" id="dev0" class="litab"> 
      <img height="20px" width="20px" src="../Images/drive.png" class="dicon"> 
      <a class="ankr dn" href="#">'/dev/sdh1'</a> 
     </li> 
    </ul> 
</li> 

$(document).on("click","#devicelist,**Here Selector will be used**",this,function(event){ 
    console.log(this); 
    console.log(event.target); 
}); 

.hitareaのdivを選択したいと考えています。私は何かを探しています$("#devicelist:div.hitarea")

これは、jQueryのselectorでのみ行う必要があります。

+1

jquery_のセレクタだけを実行する必要があります。何らかの理由がありますか? –

+0

私はjQuery 1.9.1と "on"関数を使用しています。 – Rickyrock

+0

'.on'をどのように使っているのか、前の要素をどこで選択したいのかを教えてください。 –

答えて

0

$( 'hitarea')もセレクタです。述べたように、意図したターゲットに最も近い非動的に追加された要素にバインドする必要があります(すべてのイベントの代表団と同様に)

$('#devicelist,.hitarea') 
+1

ありがとう、私はこのようにします。しかし、まだ1つの問題は、jQueryセレクタを使用して前の要素を選択する方法です。 – Rickyrock

+0

私はこれが元の質問に答えないことを指摘しなければなりません。私は、エンドユーザが前の兄弟要素(または他のセレクタ)を選択するセレクタを指定できるようにする拡張シナリオを持っているので、.prev()を使用することはオプションではありません。答えが見つかったら、ここに投稿します。 –

+0

JQueryのセレクタオプションは、現在、** next ** [兄弟要素](http://api.jquery.com/next-adjacent-selector/)または[兄弟要素](http:// api.jquery.com/next-siblings-selector/)。 ** previous **兄弟要素を選択するための文書化セレクタはありません。奇妙な。 –

1

もしprev()セレクタ

説明使用することができます必要に応じてセレクタによってフィルタリング整合要素の組 の各要素の直前の兄弟を取得します。

$('#devicelist').prev(); 
+0

あなたのコードを使用していただきありがとうございます。私はそれを行うことができますが、それはセレクタではありません、それはmethod.Iは使用できません。 – Rickyrock

+0

それは方法なのですか?私はそれを使用することはできません?メソッドの – MaVRoSCy

+0

はオブジェクトを渡すことができません。 $(document).on( "click"、 "SELECTOR"、function(){}); – Rickyrock

0

まずon()方法:

あなたは、セレクタとしてこれを使用することができますAPI内:

ほとんどの場合、クリックなどのイベントが頻繁に発生せず、パフォーマンスに重大な懸念はありません。しかし、マウスやスクロールなどの高頻度のイベントは1秒間に数十回発火する可能性があり、そのような場合はイベントを慎重に使用することが重要になります。ハンドラ自体の処理量を減らしたり、再計算するのではなくハンドラが必要とする情報をキャッシュしたり、setTimeoutを使用して実際のページ更新数をレート制限したりすることで、パフォーマンスを向上させることができます。

多くの委任されたイベントハンドラをドキュメントツリーの上部に付けると、パフォーマンスが低下する可能性があります。イベントが発生するたびに、jQueryは、そのタイプのすべてのアタッチされたイベントのすべてのセレクタを、イベントターゲットからドキュメントの先頭までのパスのすべての要素と比較する必要があります。最高のパフォーマンスを得るには、委任されたイベントをターゲット要素に可能な限り近いドキュメントの場所にアタッチします。大きなドキュメントで委任されたイベントに対しては、documentまたはdocument.bodyを過度に使用しないでください。これを考慮して

(jQueryのが最初に実行されるときにulまたはolがページ内に存在することを仮定して)私は、その要素に直接結合することをお勧めしたい:

$('ul').on(/* other stuff */); 

ではなくdocumentへ自体。

コメントに書いたように、CSSには以前の兄弟セレクタがなく、jQuery(これまでのところ私が知っている限り)はその不足を補うことはできません。あなたは、インデックスを知っていれば

$('ul').on('click', function(){ 
    var elem = $('#devicelist'); 
    if (elem || elem.prev()) { 
     // do stuff here 
    } 
}); 

あなたは、もちろん、(あなたは2番目の子要素に焦点を当てていることを考えると)できます。もっと簡潔として書か

$('ul').on('click', function(e){ 
    if (e.target.id == 'devicelist' || $('#devicelist').prev()) { 
     // do stuff here 
    } 
}); 

:これはの明白な解決策を残し単純に以下を使用してください:

$('ul').on('click', function(e){ 
    if ($(e.target).index() < 2) { 
     // do stuff here for the first two elements 
    } 
});