идентификаторы должны быть уникальными в документе , поэтому я предполагаю, что вам нужно сделать это, потому что вы откуда-то получаете данные и должны их очистить. Если можете, исправьте источник проблемы.
Если вы не можете, однако, вы можете перебирать элементы в дереве в поисках соответствующего идентификатора; как то так:
var theTargetID = /* ...whatever ID you're looking for... */;
$(theTree).find("*").each(function(element) {
if (this.id == theTargetID) {
// it matches the ID
}
});
Это создаст потенциально большой промежуточный массив (соответствующий всем дочерним элементам дерева). Это может быть место, где вам лучше использовать скучный старомодный обход DOM, а не красивые оболочки jQuery, поскольку вы пытаетесь что-то сделать с недопустимой структурой документа (несколько идентификаторов).
Вот как может выглядеть необработанный обход DOM для поиска идентификатора цели:
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
и затем обрабатывает его дочерние элементы, если необходимо, рекурсивно. Это позволяет избежать создания потенциально большого массива.
Обратите внимание, что я имел в виду узел дерева, а не лист внутри него. Вы хотите сделать это один раз, когда дерево загружено, а не только когда выбран узел в дереве & mdash; потому что вы хотите иметь недопустимую структуру как можно более кратко и упреждающе ее исправить.