2013-03-12 2 views
5

Ich muss in der Lage sein, eine eindeutige Auswahl für jedes Element auf einer Seite zu erhalten.Get einzigartige Auswahl jQuery

Zum Beispiel, wenn ich auf ein Element klicken Ich möchte etwas tun:

$(document).click(function(){ 
    var sel = getUniqueSel(this); 
}); 

Also, nach dem sel Wert in einem DB zu speichern ich diesen Wert erhalten und einfach das Element zugreifen, indem

var el = $(sel);

ich nicht ändern kann und nichts über die HTML-Struktur der Seite wissen und ich kann einfach nicht eindeutig die ID hinzufügen (mit JS) zu jedem Element, da dies ineffizient wäre.

+1

Warum Sie diejenigen, geben Sie schräg in einer ID interessiert? Nur neugierig? Interessieren Sie sich wirklich für jedes einzelne Objekt auf der Seite? – mplungjan

+0

http://stackoverflow.com/questions/5442767/returning-the-full-path-to-an-element – mplungjan

+0

@mplungjan Ich möchte die Selektoren für alle angeklickten Elemente auf einer Seite speichern :), und dieses Skript wird auf vielen Seiten enthalten. – Cristy

Antwort

6

ein weiterer Ansatz der dOM-Struktur sollte helfen könnte sein, wandern und einen Pfad zu dem Element erstellen, die Sie und später als Selektor speichern kann wieder verwendet werden, obwohl t Das ist vielleicht nicht kugelsicher, aber vielleicht ist es ein Punkt, an dem man anfangen kann.

Edit: Aktualisierte die Antwort mit Ihrem Vorschlag im Kommentar, jetzt gibt es die ID, wenn verfügbar

Gerade das Beispiel auf JSBin besuchen und die document zweimal klicken. aber bemerken, was hervorgehoben wird ..

jQuery.fn.getPath = function() { 
    if (this.length != 1) throw 'Requires one element.'; 
    var path, node = this; 
    if (node[0].id) return "#" + node[0].id; 
    while (node.length) { 
     var realNode = node[0], 
      name = realNode.localName; 
     if (!name) break; 
     name = name.toLowerCase(); 
     var parent = node.parent(); 
     var siblings = parent.children(name); 
     if (siblings.length > 1) { 
      name += ':eq(' + siblings.index(realNode) + ')'; 
     } 
     path = name + (path ? '>' + path : ''); 
     node = parent; 
    } 
    return path; 
}; 
var sel; 
$(document) 
    .click(function (e, a) { 
    if (!sel) { 
     sel = $("#comment-21702402") 
      .getPath(); 
     alert("Path is: " + sel + ", hiding the Element -> Click again to highlight"); 
    } else { 
     $(sel) 
      .css("background-color", "yellow"); 
    } 
}); 
+0

Ich könnte auch nach 'IDs 'suchen, wenn das div eine ID definiert hat, bekomme ich die ID als Selektor, sonst bekomme ich den Pfad. Ich denke, das wird etwas DB-Speicher sparen. – Cristy

0

Eine Möglichkeit besteht darin, alle Informationen zu dem Element zu erhalten, auf das geklickt wurde. Also, wenn Sie es in der Datenbank speichern können Sie es als Text zum Beispiel sparen: Wenn das Element, das Sie angeklickt ist: <div> I'm a div </div>

$(document).click(function(){ 
    var tagName = $(this).prev().prop('tagName'); 
    var attributes = {}; 
    if(this.length) { 
     $.each(this[0].attributes, function(index, attr) { 
      attributes[ attr.name ] = attr.value; 
     }); 
    } 
    var elText=$(this).html(); 
    saveToDB(tagName,attributes,elText); 
}); 

Sie können später das Element finden die Attribute verwenden Sie haben oder einfach nutzen

$(tagName+'['+attribute+'="'+value+'"]:contains("'+elText+'")') 

ich denke, das

+1

Das Speichern von Elementinhalten wäre wirklich ineffizient. – Cristy