2016-05-05 4 views
0

Ich versuche, einen Elementspeicherort innerhalb des DOM abzurufen, wenn darauf geklickt wird. So könnte es verwendet werden, um ein ausgewähltes Element in einem Vorschaufenster dynamisch zu erzeugen.Jquery - Ermitteln der Elementposition im DOM

Zum Beispiel unter der Annahme, ich habe eine Onclick Funktion auf jedem Element in der Seite ausgeführt wird, wenn ein Element geklickt wird Ich möchte einen Wert haben, wie zum Beispiel:

div#a > ul.list > li:nth-child(3) > span 

Wenn ein Benutzer auf der dritten Spanne geklickt in die Seite unten:

<html> 
<body> 
    <div id="a"> 
     <ul class="list"> 
      <li><span>first</span></li> 
      <li><span>second</span></li> 
      <li><span>third</span></li> 
      <li><span>fourth</span></li> 
     </ul> 
    </div> 
</body> 
</html> 

Ich habe das Internet durchsucht und ein paar alte Funktionen ausprobiert, die herum lagen, aber keine scheinen zu funktionieren.

Ich könnte einen Code wie unten verwenden, und dann durch alle Eltern durchlaufen, bis ich Körper treffe, aber das scheint übermäßig.

$("body *").click(function() { 
    //retrieve current element information 
    //retrieve tag name 
    var tag = $(this).prop("nodeName"); 
    //retrieve id list 
    var ids = $(this).prop("id"); 
    //replace whitespace with hash 
    var ids = ids.replace(/\s/g, "#"); 
    //retrieve class list 
    var classes = $(this).attr("class"); 
    //replace whitespace with point 
    var classes = classes.replace(/\s/g, "."); 
    //add ids and classes to tag name 
    var current_element = tag + "#" + ids + "." + classes; 
}); 

Gibt es bessere Möglichkeiten?

+1

Ich sehe nicht schneller als durch alle Eltern Looping. Du könntest [elementsFromPoint] (https://developer.mozilla.org/en-US/docs/Web/API/Document/elementsFromPoint) verwenden, aber es wird noch nicht von allen Browsern da draußen unterstützt (Safari sehe ich dich an) und ich denke, es könnte tatsächlich langsamer sein. –

+0

Mögliches Duplikat von https://stackoverflow.com/questions/4588119/get-elements-css-selector-when-it-doesnt-have-an-id – flatline

+0

Mögliche Dupe: http://stackoverflow.com/questions/5706837/get-unique-selector-of-element-in-jquery – Riddell

Antwort

0

seiner einfachen Verwendung, während (... parentNode)

var element = document.getElementById('elem'); 

    element.onclick=function(){ 
    var elem = this, 
     elemPath = ''; 

    while(elem.parentNode){ 
     elemPath += elem.tagName +' > '; 
     elem = elem.parentNode; 
    } 
    alert(elemPath); 
    } 

Ich hoffe, es hilft

Verwandte Themen