动态设置链接的目标什么都不做

时间:2011-05-06 08:46:25

标签: javascript html

我正在编写一个网页(在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给了我一个“太多的递归”错误)

2 个答案:

答案 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;
    }