从DOM中删除节点
Noob问题警报!我正在研究每秒更新一次的基本时钟,但由于我获取了未捕获的错误,因此未更新错误:NOT_FOUND_ERR:DOM异常8.基本上我只需要将函数结尾的removeChild()更改为其他内容,但是我不知道该怎么改变它。我想删除正在创建的<p class="time">
。从DOM中删除节点
function spitTime() {
var clock = new Date();
var hours = clock.getHours();
var minutes = clock.getMinutes();
var seconds = clock.getSeconds();
if (minutes <= 9) {
minutes = "0" + minutes;
}
if (seconds <= 9) {
seconds = "0" + seconds;
}
var displayTime = hours + ":" + minutes + ":" + seconds;
var newTimeElem = document.createElement("p");
newTimeElem.className = "time";
var timeText = document.createTextNode(displayTime);
newTimeElem.appendChild(timeText);
document.getElementById("timePlace").appendChild(newTimeElem);
document.getElementById("timePlace").removeChild();
}
相关HTML:
<div class="clock">
<span id="timePlace"></span>
</div>
根据你的问题,你不想删除一个孩子,你想改变现有元素的文本。
对于这一点,你可以使用textContent
:
document.getElementById('timePlace').textContent = displayTime;
应当指出的是,这是不是跨浏览器。 IE8及更低版本与innerText
一起使用。使用这种方法很简单:
var timePlace = document.getElementById('timePlace');
if ('textContent' in timePlace) {
timePlace.textContent = displayTime;
}
else {
timePlace.innerText = displayTime;
}
但是,这是一个黑客攻击。它将很好地适用于你的情况,但不要依赖于此。
如果你真的想跨浏览器兼容性,你使用jQuery的方式(或任何其他类似的库)。 jQuery的方法来改变文字:
$('#timePlace').text(displayTime);
它采用nodeValue
,唯一真正的跨浏览器的方式来处理文本。但它必须递归执行此操作,因为它仅在textNodes
上可用。它相当于使用data
(因为@amnotiam在您的问题的评论中)。
如果你想删除timePlace
元素本身:
document
.getElementById("timePlace")
.parentNode
.removeChild(document.getElementById('timePlace'));
假设这是意图,这个工程由找到关元/节点(getElementById()
),移动到该元素的parentNode
,然后从父元素中移除该元素(因为removeChild()
都需要DOM点头e被传递给它,和删除当前元素/节点的子节点)。
根据从OP(下图)的注释更新,只需使用:
newTimeElem.parentNode.removeChild(newTimeElem);
参考文献:
我想删除正在创建的
。 – dezman 2012-07-17 17:51:08
您没有指定要删除的子节点。
var oldChild = element.removeChild(child);
element.removeChild(child);
- 儿童将被从DOM移除的子节点。
- 元素是孩子的父节点。
- oldChild保存对已移除子节点的引用。 oldChild所==孩子
<script type="text/javascript">
function spitTime() {
var clock = new Date();
var hours = clock.getHours();
var minutes = clock.getMinutes();
var seconds = clock.getSeconds();
if (minutes <= 9) {
minutes = "0" + minutes;
}
if (seconds <= 9) {
seconds = "0" + seconds;
}
var displayTime = hours + ":" + minutes + ":" + seconds;
var newTimeElem = document.createElement("p");
newTimeElem.className = "time";
var timeText = document.createTextNode(displayTime);
newTimeElem.appendChild(timeText);
$('#timePlace').children('.time').remove();
document.getElementById("timePlace").appendChild(newTimeElem);
setTimeout('spitTime()', 100);
}
$(document).ready(function(){
setTimeout('spitTime()', 100);
});
</script>
</head>
<body>
<div class="clock">
<span id="timePlace"></span>
</div>
</body>
while (timePlace.firstChild) {
timePlace.removeChild(timePlace.firstChild)
}
是我想要的,虽然它可能更好只是编辑内容,这对我很好。
为什么不直接更改现有元素的内容? – 2012-07-17 17:49:06
我该怎么做? – dezman 2012-07-17 17:51:27
如何在不使用HTML的情况下知道? – 2012-07-17 17:52:09