我有一个hta应用程序,它使用xslt解析一些xml,并在hta页面中用结果填充div。结果包含一个表,其中包含xml的摘要以及xml元素计数的超链接 - 示例如下
页面上有一个按钮,在“content”div之外,允许用户将页面保存到没有超链接的静态html文件。我在下面有以下javascript,但是当点击“保存”按钮时,超链接仅从第一个项目中移除,而不是第二个项目..(在正确的版本中将会有更多的实际超链接)。我做错了什么 - 我认为它与循环有关......并且必须在javascript中完成,没有jquery等 - 长篇故事为什么......
function SaveContent() {
var myContent = document.getElementById("content")
var myLinks = myContent.getElementsByTagName('a')
for (var myItem = 0; myItem < myLinks.length; myItem++) {
var myChild = myLinks[myItem]
var myParent = myChild.parentNode
var myValue = myChild.innerText
myChild.parentNode.removeChild(myChild)
myParent.innerText = myValue
/*code to save to file will go here */
}
}
<div id="content">
<table>
<tr>
<td>Status</td>
<td>Count</td>
</tr>
<tr>
<td>New</td>
<td>
<a href="#">34</a>
</td>
</tr>
<tr>
<td>Closed</td>
<td>
<a href="#">78</a>
</td>
</tr>
</table>
</div>
非常感谢
答案 0 :(得分:2)
getElementsByTagName
是一个实时列表。当您在某个项目上调用removeChild
时,它会从列表中删除...但您的循环索引会继续显示!
典型的解决方案是:
for( var myItem = myLinks.length-1; myItem >= 0; myItem--)
即。从最后到开始工作。如果您的代码可能添加更多链接,这也很好,因为它们不会被迭代。
答案 1 :(得分:0)
试试这个:
function SaveContent() {
var myContent = document.getElementById("content")
var myLinks = myContent.getElementsByTagName('a')
while (myLinks.length) {
var child = myLinks[0];
var parent = child.parentNode;
var value = child.innerText;
parent.removeChild(child);
parent.innerText = value;
}
}