JSFiddle URL: http://jsfiddle.net/sFe45/
Код:
<html>
<head>
<title>Foo</title>
<script type="text/javascript">
var target;
var anchor;
function removeTags(node){
for (var i = 0; i < node.childNodes.length; i++) {
var childNode = node.childNodes[i];
if (childNode.nodeType == 1) {
node.removeChild(childNode);
continue;
}
removeTags(childNode);
}
}
window.onload = function() {
target = document.getElementById('target');
anchor = document.getElementById('anchor');
anchor.onclick = function() {
removeTags(target);
}
}
</script>
</head>
<body>
<div id="target">
<p>
<a href="#" id="anchor">Remove tags</a>
</p>
Text
<p>Para 1</p>
<p>Para 2</p>
<p>Para 3</p>
<p>Para 4</p>
<p>Para 5</p>
<p>Para 6</p>
<p>Para 7</p>
<p>Para 8</p>
<p>Para 9</p>
<p>Para 10</p>
Text
</div>
</html>
Как вы заметите в URL-адресе JSFiddle, когда вы нажимаете ссылку "Удалить теги", removeTags()
не удаляет элементы альтернативного абзаца. Причина в том, что когда removeTags
удаляет дочерний узел из своего родителя, оставшиеся дочерние узлы сдвигаются на одну позицию влево в массиве node.childNodes
.
Как это можно исправить аккуратно?