我正在尝试将target="_blank"
添加到页面上的链接,具体取决于复选框的点击。
在javascript方面我有:
function newTab(v) {
if(v.tab.checked == true) {
document.getElementsByTagName('a').setAttribute('target', '_blank');
} else {
document.getElementsByTagName('a').setAttribute('target', '_self');
}
} //end function
在HTML方面,我有:
<form>
<input type="checkbox" name="tab" onclick="newTab(this.form)" />
<label>Open Links In New Tab?</label>
</form>
<a href="//mail.google.com">Gmail</a>
当然,它并不像我想象的那么简单,所以它不起作用。
该页面包含十几个链接,因此我需要使用复选框来应用页面上的所有链接 - 为什么我使用getElementsByTagName()
。任何帮助表示赞赏!
有效的代码如下:
function newTab(f) {
var els = document.getElementsByTagName('a'); //read anchor elements into variable
if(f.tab.checked == true) { //If the box is checked.
for (var i in els) {
els[i].setAttribute('target', '_blank'); //Add 'target="blank"' to the HTML
}
} else { // not checked...
for (var i in els) {
els[i].setAttribute('target', '_self'); //Add 'target="self" to HTML
}
}
} //end function.
答案 0 :(得分:4)
getElementsByTagName()
返回一个节点集。您需要迭代它并依次将更改应用于每个。你现在拥有的更像是jQuery语法,它在内部为你处理。
这将显示在控制台中。对于JS问题,始终检查控制台,然后再想知道什么是错误的。
var els = document.getElementsByTagName('p');
for (var i=0, len = els.length; i<len; i++)
els[i].setAttribute('name', 'value');
此外,对于复选框,使用更改,而不是单击事件,因为有人可能通过键盘切换它们,而不是鼠标。最后,您应该考虑集中处理事件,而不是HTML中指定的内联DOM-zero事件。造成这种情况的众多原因超出了本问题的范围。