如何在javascript中禁用链接

时间:2016-05-13 09:31:21

标签: javascript

这实际上是一个2部分的问题。

1)我现在遇到麻烦,循环浏览我的链接并用javascript禁用它。我需要从一个名为“bottom”的div id中获取链接,并且其中包含“nhl”的任何链接都需要被禁用,或者只是你不想用它来表达它。到目前为止我有:外部js文件。

onload = function() {
    var links = document.getElementById("bottom").getElementsByTagName("a");

    for(i = 0; i < links.length; i++) {
        if (links[i].indexOf("nhl") >= 0) {
            links[i].onclick = function() {
                 return false;
            }
        }
    }
}

html文件:

<div id="bottom" class="change">
<a href="http://www.nhl.com/">www.nhl.com</a>
<a href="https://www.youtube.com/">www.youtube.com</a>
<a href="http://www.w3schools.com/">www.w3schools.com</a>
</div>

2)我的js文件目前包含几个函数,如:

function changeColorOnMouseIn() {
    this.style.color = "red";
}

function changeColourOnMouseOut() {
    this.style.color = "black";
}

onload = function() {
    var divClasses = querySelectorAll(".change p");

    for(i = 0; i < divClasses.length; i++) {
        divClasses[i].onmouseover = changeColorOnMouseIn;
        divClasses[i].onmouseout = changeColorOnMouseOut;
    }
}

我的问题是我应该继续这样做,还是做这样的事情:

onload = function() {
    var divClasses = document.querySelectorAll(".change p");

    for(i = 0; i < divClasses.length; i++) {
        divClasses[i].onmouseover = function() {
            this.style.color = "red";
        }
    }
}

或者我应该只使用for循环创建一个函数,并在onload函数中调用“myFunctionName()”?有什么区别?你会在什么情况下做另一个?

谢谢!

1 个答案:

答案 0 :(得分:0)

对于第一部分我在你的循环中发现了一个小错误,你需要编写链接[i] .href.indexOf(&#34; nhl&#34;)

onload = function() {
var links = document.getElementById("bottom").getElementsByTagName("a");

    for(i = 0; i < links.length; i++) {
       if(links[i].href.indexOf("nhl") >= 0) {// CHANGE
           links[i].onclick = function() {
                return false;
               }
           }
    }
 }

对于第二部分,您可以通过CSS

轻松完成
.change p {
  color: black;
}
.change p:hover{
  color: red;
}

如果您仍想在javascript中使用,那么这种方法更好

function changeColorOnMouseIn() {
    this.style.color = "red";
}

function changeColourOnMouseOut() {
    this.style.color = "black";
}

onload = function() {
    var divClasses = querySelectorAll(".change p");

    for(i = 0; i < divClasses.length; i++) {
        divClasses[i].onmouseover = changeColorOnMouseIn;
        divClasses[i].onmouseout = changeColorOnMouseOut;
    }
}

这里为什么这种方法更好的方法是因为下面的代码会创建n个匿名函数,所以如果循环是10个项目将有10个匿名函数,整个上面的方法它将具有单个函数声明。

divClasses[i].onmouseover = function() {
    this.style.color = "red";
}