从同一链接中删除“href”

时间:2014-04-26 18:28:24

标签: javascript html hyperlink href

我正在尝试使用javascript删除单个链接,但它无法正常工作。

<a id="yes" target="_blank" href="http://google.com" onclick="this.setAttribute('href', '')">

但由于链接被删除,因此无法打开Goog​​le。 我可以删除其他链接,使用不同的id-s,但我希望在新标签页中打开链接后禁用相同的链接ID

5 个答案:

答案 0 :(得分:0)

您无法为元素设置相同的ID - ID在单页上必须是唯一的。如果要删除某些特定链接,可以将它们设置为CLASS,并按类删除

除了其他答案之外 - 你可以删除所有访问过的链接的href属性而不是加载页面

$(document).ready(function(){

  $("a:visited").attr("href", "#")

});

或者您可以删除现在点击的链接

的href attr
$(document).ready(function(){

  $("a").click(function(){

    setTimeout(function() {
      $(this).attr("href", "#")
    }, 300);

  });

});

答案 1 :(得分:0)

所以你基本上只希望它只能工作一次?有点像...

onclick="if (!this.wasClicked) { this.wasClicked = true; } else { this.removeAttribute('href'); }"

但请注意,使用内联HTML事件(<a onclick="...">...</a>)是一种非常糟糕的做法。将事件处理程序放在外部文件中。

答案 2 :(得分:0)

任何onclick处理程序都将在默认操作之前执行,这就是为什么你可以阻止事件处理程序的默认操作。

要完成默认操作,然后在下次点击时阻止它,只需使用属性并存储下次点击时检查的布尔值:

document.getElementById('yes').addEventListener('click', function(e) {
    if (this.prevented) e.preventDefault();
    this.prevented = true;
}, false);

FIDDLE

要将其应用于所有链接,您需要

var anchors = document.getElementsByTagName('a');

for (var i=anchors.length; i--;) {
    anchors[i].addEventListener('click', function(e) {
        if (this.prevented) e.preventDefault();
        this.prevented = true;
    }, false);
}

答案 3 :(得分:0)

这是一种在没有jQuery的情况下将此逻辑应用于所有“a”标记的方法。只需运行onload

var atags = document.getElementsByTagName('a');

for (var a = 0; a < atags.length; a++) {
  atags[a].onclick = function() {window.open(this.getAttribute('href'));
                                 this.removeAttribute('href');
                                 this.onclick = null;};

}

这是一个jsfiddle - http://jsfiddle.net/Awvj4/

要将此逻辑应用于单个标记,请执行以下操作(假设“a”标记的ID为“myatag”)

document.getElementById('myatag').onclick = function() {
  window.open(this.getAttribute('href'));
  this.removeAttribute('href');
  this.onclick = null;};

答案 4 :(得分:0)

我将其视为

  1. 点击链接
  2. 链接打开新标签/窗口
  3. 链接已禁用
  4. 因此

    function one_time_link(a) {
        var clicked = false; // flag; has the link been clicked?
        a.addEventListener('click', function (e) {
            if (clicked)     // yes
                e.preventDefault(); // cancel the click
            clicked = true;  // mark flag as yes
        }
    }
    
    // apply to your link (afer it exists)
    one_time_link(document.getElementById('yes'));
    

    现在,点击取消后,第一个链接点击表现正常。


    带有一个标志的多个链接?

    function one_time_list(list) {
        var clicked = false, i;
        function click(e) {
            if (clicked)     // yes
                e.preventDefault(); // cancel the click
            clicked = true;  // mark flag as yes
        }
        for (i = 0; i < list.length; ++i) {
            list[i].addEventListener('click', click);
        }
    }
    
    // and usage
    one_time_list([node1, node2, node3]);
    

    真的需要删除 href 属性吗?

    node.addEventListener('click', function () {
        var target = this;
        setTimeout(function () { // delay removal until after click complete
            target.removeAttribute('href');
        }, 50);
    });