我正在编写一个网页(在PHP中,虽然这个问题不涉及PHP本身),它存储URL并允许您为它们应用标记,从而允许您按标签搜索URL。
我尝试添加容量来设置一个复选框,以定义URL是否会在新选项卡中打开,或者默认情况下使用一堆JavaScript和cookie来打开相同的选项卡。该复选框在页面加载之间正确保持其状态,但没有一个链接被赋予target =“_ blank”。
我已经给了所有的URL“outbound”类,并且使用了稍微未记录的document.getElementsByClassName()函数来获取这个类的所有链接,并且我已经验证了这部分是有效的,因为它是返回与页面上的URL数量相同的链接数组。
以下是我正在做的一个例子:
function onload() {
newtab = readCookie("newtab");
if (newtab == null) {
createCookie("newtab", "true");
newtab = "true";
}
newtab = (newtab == "true");
updateLinks(newtab);
}
function updateLinks(newtab) {
if (newtab)
target="_blank";
else
target="";
for (link in document.getElementsByClassName("outbound")) {
link.target = target;
}
}
function checkboxToggled(checkbox) {
updateLinks(checkbox.checked);
}
我已经验证在updateLinks()中正确设置'target',然后循环遍历所有链接。有没有人建议什么可能失败?
我在谷歌浏览器(我的主浏览器)和Firefox上测试了这个,但它在两者上都没有正常工作。 (奇怪的是,Firefox给了我一个“太多的递归”错误)
答案 0 :(得分:2)
那里有几个问题,尤其是你根本没有在元素上设置target
(你在临时字符串上设置它;详情如下)。
我强烈建议您不要在for..in
上使用NodeList
,这就是您在此处所做的事情:
for (link in document.getElementsByClassName("outbound")) {
for..in
遍历对象的所有可枚举属性。 (并且link
将是属性 name ,而不是属性 value ,无论如何。)我明确地说它:
var index, list;
list = document.getElementsByClassName("outbound");
for (index = 0; index < list.length; ++index) {
link = list[index];
// ...
}
另请注意,并非所有浏览器都支持getElementsByClassName
。
答案 1 :(得分:1)
for (link in document.getElementsByClassName("outbound")) {
document.getElementsByClassName("outbound")[link].target = target;
}