Можно ли изменить идентификатор HTML-элемента с помощью Javascript?
У меня есть переменная javascript obj, которая представляет элемент в DOM, и я хочу изменить его идентификатор. Я попытался сделать это следующим образом, что также иллюстрирует, что это не работает!
obj.id = "newID";
alert(obj.id); // this gives me newID as required
var element = document.getElementById("newID");
if (element != null) { alert("Hooray"); // this alert never gets displayed! }
что не так с моим кодом выше, что означает, что идентификатор, похоже, изменен, но не поднят в DOM? Большое спасибо заранее.
7 ответов
код, который вы показываете, работает; проблема, вероятно, в коде, который ищет и назначает obj
. Я предполагаю, что это просто объект javascript, а не часть дерева DOM.
поскольку вы не дали нам весь код, я предполагаю, что у вас, вероятно, есть что-то похожее на это в вашем коде
obj = document.createElement("div");
obj.id = "something";
// ...
obj.id = "newID";
alert(obj.id); // this gives me newID as required
var element = document.getElementById("newID");
if (element != null) { alert("Hooray"); // this alert never gets displayed! }
в этом конкретном случае, document.getElementById("newID")
не вернет вам ничего, так как элемент не был добавлен на страницу, и поэтому он не найден на странице.
нет причин, по которым это не должно работать с использованием чистого JavaScript. Вот рабочая скрипку Это показывает, что это работает. Вам не нужно решение jQuery или любой другой JavaScript-метод, id = "foo";
- Это самый простой способ изменения идентификатора объектов DOM.
взгляните на мою скрипку выше и попробуйте увидеть, в чем разница между вашим кодом и моим.
ваш код выглядит нормально, хотя, если вы комментируете таким образом в своем коде, вы можете понять, что скобка никогда не закрывается из-за комментария.
if (element != null) { alert("Hooray"); // this alert never gets displayed! } <-- this brace
попробуйте это:
для меня
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>test</title>
</head>
<body bgcolor="#ffffff">
<script type="text/javascript">
function ChangeID(elementId, newId) {
var obj = document.getElementById(elementId);
obj.id = newId;
}
function SetContent(elementId, content) {
var obj = document.getElementById(elementId);
obj.innerHTML = content;
}
</script>
<div id="div1"></div>
<a href="#" onclick="ChangeID('div1', 'div6');">ChangeID</a><br />
<a href="#" onclick="SetContent('div6', 'this is the contents');">Set Contents</a>
</body>
</html>
есть еще одна вещь, чтобы рассмотреть. Ты пытаешься сделать это до того, как дом готов? Этот элемент уже загружен? Если вы попытаетесь изменить элемент, которого у DOM нет в дереве, вы тихо потерпите неудачу.
Да, вы можете, вот решение с jquery
$("#xxx").attr("id", "yyy");
или
getElementById("xxx").setAttribute("id", "yyy");