Шаблон getElementById()
У меня есть div, и там я получил некоторые дочерние элементы в уровнях undefined.
Теперь мне нужно изменить идентификатор каждого элемента в один div. Как реализовать?
Я думал, потому что у них есть восходящие идентификаторы, поэтому если родительский id = 'path_test_maindiv', то следующий downer будет "path_test_maindiv_child", и поэтому я подумал, что я разрешу это с помощью подстановочных знаков, например:
document.getElementById('path_test_*')
Возможно ли это? Или есть другие способы?
Ответы
Ответ 1
Не в родном JavaScript. У вас есть различные варианты:
1) Поместите класс и используйте getElementsByClassName, но он не работает в каждом браузере.
2) Сделайте свою собственную функцию. Что-то вроде:
function getElementsStartsWithId( id ) {
var children = document.body.getElementsByTagName('*');
var elements = [], child;
for (var i = 0, length = children.length; i < length; i++) {
child = children[i];
if (child.id.substr(0, id.length) == id)
elements.push(child);
}
return elements;
}
3) Используйте библиотеку или селектор CSS. Как jQuery;)
Ответ 2
В одном из комментариев вы говорите:
(...) IE в любом случае забанен на моей странице, потому что он не получает его с помощью CSS. Это инструмент администратора для разработчиков, так что всего несколько человек, и они все равно будут использовать FF
Я думаю, что вы должны следовать другому подходу с самого начала, но для новых целей в новых браузерах (хорошо, FF3.5) вы можете использовать document.querySelectorAll()
, с помощью которого вы можете получить такие же результаты, как JQuery:
var elements = document.querySelectorAll('[id^=foo]');
// selects elements which IDs start with foo
Обновление: querySelectorAll()
только не поддерживается в IE & lt; 8 и FF 3.0.
Ответ 3
jQuery позволяет находить элементы, где определенный атрибут начинается с определенного значения
В jQuery вы должны использовать
$('[id^="path_test_"]')
Ответ 4
Я не думаю, что в getelementById допустимы шаблоны.
Вместо этого вы можете иметь все дочерние узлы вашего DIV, используя:
var childNodeArray = document.getElementById('DIVID').childNodes;
Это даст вам массив всех элементов внутри вашего DIV. Теперь, используя цикл for
, вы можете пройти через все дочерние элементы, и одновременно вы можете проверить тип элемента или идентификатор или NAME, если они совпадают, а затем изменить его, как вы хотите.
Ответ 5
Вы не должны изменять идентификатор элемента для идентификатора другого существующего элемента. Это очень неправильно, поэтому вам лучше переосмыслить свою основную логику, прежде чем продолжать.
Что вы пытаетесь сделать точно?
В любом случае, чтобы получить все элементы с идентификатором, начинающимся с чего-либо, используйте jQuery, как было предложено ранее, если вы не можете также использовать чистый JavaScript, сообщите нам.
Ответ 6
Попробуйте это в 2019 году как подстановочный знак.
document.querySelectorAll("[id*=path_test_]")