Javascript 通过单击按钮禁用超链接

Javascript 通过单击按钮禁用超链接,javascript,button,hyperlink,Javascript,Button,Hyperlink,我想做一些类似的东西: 但是我想在多个链接上应用这个方法,所以我必须使用元素类。 仅仅使用“.getElementsByClassName”更改代码是不起作用的,我不明白为什么。 你能给我解释一下吗? 这个问题的答案是什么 var链接; 函数disable_link(){ document.getElementsByClassName('testlink')。disabled=true; link=document.getElementsByClassName('testlink').href

我想做一些类似的东西: 但是我想在多个链接上应用这个方法,所以我必须使用元素类。 仅仅使用“.getElementsByClassName”更改代码是不起作用的,我不明白为什么。 你能给我解释一下吗? 这个问题的答案是什么

var链接;
函数disable_link(){
document.getElementsByClassName('testlink')。disabled=true;
link=document.getElementsByClassName('testlink').href;
document.getElementsByClassName('testlink')。removeAttribute('href');
} 
函数enable_link(){
document.getElementsByClassName('testlink').setAttribute(“href”,link);
} 

使残废

使可能

甚至其他方法也可以


编辑:感谢大家的回答。

请注意下面的引文:

getElementsByClassName()方法以节点列表对象的形式返回文档中具有指定类名的所有元素的集合

NodeList对象表示节点的集合。可以通过索引号访问节点。索引从0开始

提示:您可以使用NodeList对象的length属性来确定具有指定类名的元素数量,然后可以循环遍历所有元素并提取所需信息


[]

请注意以下引用中的注释:

getElementsByClassName()方法以节点列表对象的形式返回文档中具有指定类名的所有元素的集合

NodeList对象表示节点的集合。可以通过索引号访问节点。索引从0开始

提示:您可以使用NodeList对象的length属性来确定具有指定类名的元素数量,然后可以循环遍历所有元素并提取所需信息

[]

返回一个HTMLCollection,因此您必须在其上循环并单独处理每个链接

在这种情况下,您不能再使用临时变量来保存禁用的链接
href
。简单的解决方案是将删除的
href
属性存储在相应元素的另一个属性中

它可以看起来像这样:

function disable_link() {
    var links = document.getElementsByClassName('testlink');
    for (var i = 0; i < links.length; i++) {
        links[i].setAttribute('data-href', links[i].getAttribute('href'));
        links[i].removeAttribute('href');
    }
}

function enable_link() {
    var links = document.getElementsByClassName('testlink');
    for (var i = 0; i < links.length; i++) {
        links[i].setAttribute("href", links[i].getAttribute('data-href'));
    }
}
功能禁用链接(){
var links=document.getElementsByClassName('testlink');
对于(变量i=0;i
演示:

返回一个HTMLCollection,因此您必须在其上循环并单独处理每个链接

在这种情况下,您不能再使用临时变量来保存禁用的链接
href
。简单的解决方案是将删除的
href
属性存储在相应元素的另一个属性中

它可以看起来像这样:

function disable_link() {
    var links = document.getElementsByClassName('testlink');
    for (var i = 0; i < links.length; i++) {
        links[i].setAttribute('data-href', links[i].getAttribute('href'));
        links[i].removeAttribute('href');
    }
}

function enable_link() {
    var links = document.getElementsByClassName('testlink');
    for (var i = 0; i < links.length; i++) {
        links[i].setAttribute("href", links[i].getAttribute('data-href'));
    }
}
功能禁用链接(){
var links=document.getElementsByClassName('testlink');
对于(变量i=0;i

演示:

这行行不通,因为在参数中设置testclass的哪个href没有意义:

link = document.getElementsByClassName('testlink').href;
实际上,您不需要删除href。相反,您可以创建一个非活动类,并在所有链接上切换该类为testlink类。(在IE11+和其他方面工作)

jquery切换类(处理启用和禁用):


这行行不通,因为在参数中设置testclass的哪个href没有意义:

link = document.getElementsByClassName('testlink').href;
实际上,您不需要删除href。相反,您可以创建一个非活动类,并在所有链接上切换该类为testlink类。(在IE11+和其他方面工作)

jquery切换类(处理启用和禁用):


使用jQuery将使这更容易。这是一个选项吗?当然可以,但是我怎么做呢?当禁用href就足够了时,为什么要删除href?使用jQuery会让这更容易。这是一个选项吗?当然可以,但我如何才能做到?禁用href就足够了,为什么要删除href?因此,您不能将其分配给列表,而是将列表中的项目逐个分配给列表。因此,您不能将其分配给列表,但列表中的项目,一个接一个。可能值得指出的是,IE 11是支持HTML元素上的ponter事件所必需的。可能值得指出的是,IE 11是支持HTML元素上的ponter事件所必需的。非常感谢,现在我明白了。非常感谢,现在我明白了。
function disable_link(){    
$(".testlink").toggleClass("not_active")
}