2012-03-04 6 views
1

各要素のDOMインデックスをページに保存する必要があります。要素は、DOM内でそれらを識別するためのidまたはクラス名のいずれかを持つこともあれば、持たないこともあります。私は動作するメソッドがありますが、これをコード化するより効率的な方法があるのだろうかと思います。どのような援助のためのより効率的な方法でページにノードのインデックスを取得できますか?

おかげで...

コード:

$('textarea,input,select,img,a,span,label,embed,object,caption,map,h1,h2,h3,h4,h5,h6,li,ul,th,p,td,div').click(function (event) { 

      if (event.target.nodeName.toLowerCase() == "textarea") { 
       var nodeIndex = $("textarea").index(this); 
       var nodeName = $(this).get(0).nodeName 
       alert(nodeName + "," + nodeIndex); 
      } 

      if (event.target.nodeName.toLowerCase() == "input") { 
       var nodeIndex = $("input").index(this); 
       var nodeName = $(this).get(0).nodeName 
       alert(nodeName + "," + nodeIndex); 
      } 

      if (event.target.nodeName.toLowerCase() == "img") { 
       var nodeIndex = $("img").index(this); 
       var nodeName = $(this).get(0).nodeName 
       alert(nodeName + "," + nodeIndex); 
      } 

      //and so on... 
     }); 
+0

コードはすべての要素に対して0のインデックスを返します。http://jsfiddle.net/ANAZ9/ ここでは正確に何をしようとしていますか?私はtextarea、入力とページ上のH1を持って、私がtextareaをクリックした場合、私は、その入力のためのインデックス0を取得する必要がありますか? – codef0rmer

+0

@ codef0rmerはい、私は3つの入力を持っていると私は1を返す2番目のものをクリックするか、私は4つの画像を持っている場合は、4番目のインデックスは3です。 – Rob

+0

@ codef0rmer - あなたのデモは、ほとんどの作品は – charlietfl

答えて

1

ここ

var noSearch=['script', 'style']; 

$('body *').not(noSearch.join()).click(function(){ 
    var nodeName=this.nodeName 
    var idx=$(nodeName).index(this); 

    alert(nodeName +' '+idx) 
}) 

EDITを助けるかもしれないアプローチだ:私はあなたがより除外する以下のタグを有することができるアプローチを取りましたinclude

+0

自分自身を表示されます。要素をクリックすると、クリックされたノードの下の要素も取得されます。画像の下に複数のdivがある場合は、それぞれにアラートが表示されます。私はe.stopImmediatePropagation()を試みた。クリック後にDOMイベントを発生させる必要があります。 – Rob

+0

fiddle.netでデモを一緒にして、目的が何であるかをよりよく理解してください。 – charlietfl

+0

私は以下を追加しました:if(event.target === this){alert(nodeName + 'idx )}それは完全に動作します!新しい方向に私を操縦してくれてありがとう:) – Rob

関連する問題