IDs must be unique within the document, поэтому я предполагаю, что вам нужно это сделать, потому что вы получаете данные откуда-то и должны их очистить. Если возможно, исправьте источник проблемы.
Если вы не можете, вы можете прокрутить элементы внутри дерева, ища соответствующий идентификатор; что-то вроде этого:
var theTargetID = /* ...whatever ID you're looking for... */;
$(theTree).find("*").each(function(element) {
if (this.id == theTargetID) {
// it matches the ID
}
});
Это создаст потенциально большой временный массив (соответствующий все потомок элементы из дерева). Это может быть место, где вам лучше всего использовать скучный старомодный обход DOM, а не красивые обертки jQuery, поскольку вы пытаетесь сделать что-то с недопустимой структурой документа (несколько идентификаторов).
Вот что сырой DOM обход ищет целевой ID может выглядеть следующим образом:
function traverse(theTargetID, element) {
var node;
if (element.id == theTargetID) {
// It matches, do something about it
}
// Process child nodes
for (node = element.firstChild; node; node = node.nextSibling) {
if (node.nodeType === 1) { // 1 == Element
traverse(theTargetID, node);
}
}
}
Это предполагает, что element
аргумента на самом деле является DOM элемент (не объект JQuery, или текстовый узла и т.д.). Он проверяет элемент id
и затем обрабатывает его дочерние элементы, при необходимости рекурсивно. Это позволяет избежать создания потенциально большого массива.
Обратите внимание, что я имел в виду узел дерева, а не лист внутри него. Вы хотите сделать это один раз, когда дерево будет загружено не только тогда, когда выбран узел в дереве —, потому что вы хотите как можно более короткую как можно более ненадлежащую структуру и исправить ее проактивно.
такой же идентификатор не является хорошей практикой .... – Reigel
Вы имеете в виду атрибут ': selected'? В этом случае, если будет работать только для ''. См. [Http://api.jquery.com/selected-selector/](http://api.jquery.com/selected-selector/). –