2010-07-21 17 views
25

Oltre all'ID, se si dice, si desidera un identificativo univoco per un elemento HTML (diciamo un div).Identificatore univoco per elementi HTML

Ho sfogliato il DOM per qualcosa (come un numero o una stringa) che è univoco per ogni elemento; ma il DOM è grande e non sono riuscito a trovarlo su Internet.

C'è qualche proprietà (nel DOM ovviamente) che è unica solo per quell'elemento? (Altro che l'ID e anche non si specifica, ma arriva quando il DOM è costruito)

+2

FWIW, IE offre una [di proprietà uniqueID] (http: //msdn.microsoft.com/en-us/library/ms534704 \ (VS.85 \) aspx) oggetti DOM che, quando vi si accede, genera un identificatore univoco per quell'elemento. Non fa parte delle specifiche e comunque non ti aiuterà in altri browser. –

+0

Ho creato un [gist] (https://gist.github.com/renaatdemuynck/57b1b78b6611e6d5d866) con uno spessore che aggiunge la funzionalità uniqueID di IE ad altri browser. –

risposta

17

Come dice Pekka, sarebbe più facile se tu descrivessi cosa vuoi fare. Fino ad allora ecco due suggerimenti.

A meno che non sia effettivamente necessario esprimere l'ID come una sorta di stringa, è possibile salvare il normale riferimento DOM.

Se è necessario esprimerlo come stringa per qualche motivo, è necessario assegnare un ID univoco.

var getId = (function() { 
    var incrementingId = 0; 
    return function(element) { 
    if (!element.id) { 
     element.id = "id_" + incrementingId++; 
     // Possibly add a check if this ID really is unique 
    } 
    return element.id; 
    }; 
}()); 
+0

Sono andato con una soluzione simile a creare ID univoci me stesso. Grazie per l'informazione. –

+3

Dato che usi jQuery, dovrei renderti conto della sua funzione 'data' con la quale puoi assegnare qualsiasi tipo di informazione a un elemento: http://api.jquery.com/data/ In effetti jQuery stesso usa un unqiue ID per implementarlo, tuttavia non sono sicuro che sia possibile accedere a quell'ID in modo affidabile. – RoToRa

2

C'è l'attributo name che possono essere indirizzi da document.getElementByName.

Non penso che esistano altri identificatori univoci, anche se è possibile simularne uno impostando una proprietà (ad esempio title) su un valore univoco e quindi eseguire una query per quello. Ma questo è crudele.

A cosa serve esattamente? Se fornisci maggiori informazioni sulla tua situazione, qualcuno probabilmente presenterà un suggerimento.

+0

Alla ricerca di una soluzione simile alla funzione di identificazione in prototipo. Sfortunatamente, sto usando jQuery. Penso che farei meglio creando la mia funzione di identificazione. –

4

L'unico altro identificatore a cui riesco a pensare è l'XPath dell'elemento nel documento.

Per esempio, il link del titolo all'interno del titolo di questa pagina molto ha un XPath di

/html/body/div[3]/div[2]/div/h1/a 

Ma come Pekka già detto, dipende da cosa si vuole fare. E non penso che tu possa ottenere facilmente Xpath dal DOM in JavaScript, nonostante Xpath sia disponibile oggigiorno nei motori JS.

+1

Se solo tu potessi accedere a queste informazioni in modo nativo. –

+2

@Andy Xpath è disponibile nei browser moderni. Non penso proprio che ci sia un modo per portare Xpath su un nodo con qualche tipo di funzione nativa. Almeno non ne sono a conoscenza. – Gordon

+0

scusate, avrei potuto essere più chiaro che era quello che intendevo. –

0

È possibile utilizzare una libreria o eseguire il rollover per creare un identificativo univoco. JQuery ha .data():

negozio di dati arbitrari associati con gli elementi corrispondenti o tornare il valore al deposito dati denominato per il primo elemento nella serie di elementi corrispondenti.

1

Internet Explorer ha una proprietà "uniqueID" per ogni elemento. Il problema è che gli altri browser non lo supportano.

+0

IE ha meno del 10% di utilizzo in tutto il mondo al giorno d'oggi. – Ant

0

Ho appena incontrato la stessa situazione e mentre cercavo alcuni elementi DOM nell'utilità di strumenti di sviluppo di Chrome, ho notato che sembra che tutti abbiano una proprietà come jQuery11230892710877873282 assegnata con un numero univoco. Ovviamente il numero dopo 'jQuery' è diverso ogni volta che si carica la pagina, suppongo che jQuery lo stia generando internamente ogni volta che tenta di accedere o manipolare qualsiasi elemento DOM. Ho giocato un po 'con esso, e sembra che gli elementi che non sono mai accessibili/manipolati da jQuery potrebbero non avere questa proprietà, ma nel momento in cui fai qualcosa come $(elem) la proprietà sarà lì.Quindi, dal momento che stiamo usando sia jQuery che lodash, ho ideato la seguente funzione per restituire un ID univoco indipendentemente dal fatto che l'elemento abbia effettivamente un attributo ID id.

_.reduce($(elem), function(result, value, key) { if(_.startsWith(key, 'jQuery')) return value; }, 0) 
+0

Ho scoperto che questo è l'attributo 'expando' di jQuery, maggiori informazioni su di esso qui: https://stackoverflow.com/questions/3922441/questo-è-il-misurarsi-di-jquery-attributi casuali-in -html-EXPANDO attributo – AsGoodAsItGets

Problemi correlati