удаление «href» из той же ссылки

0

Я пытаюсь удалить одну ссылку с помощью javascript, но она не будет работать.

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

Но он не может открыть Google по мере удаления ссылки. Я могу удалить другие ссылки, используя разные идентификаторы, но я хочу, чтобы тот же идентификатор ссылки был отключен после того, как ссылка открыта на новой вкладке

  • 0
    Просто с JQuery, ты в порядке?
  • 1
    Вы пытались использовать onclick='this.removeAttribute('href'); return false;' ?
Показать ещё 1 комментарий
Теги:
hyperlink
href

5 ответов

0

Вот способ применить эту логику ко всем вашим "а" тегам без jQuery. Просто запустить 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" имеет идентификатор "myatag")

document.getElementById('myatag').onclick = function() {
  window.open(this.getAttribute('href'));
  this.removeAttribute('href');
  this.onclick = null;};
  • 0
    Я делаю это по id следующим образом: <a id="id1" href="link here here" target="_blank" onclick="removelink('id1')"> некоторый текст </a> и функция javascript: function removelink (b) {var atags = document.getElementById (b); for (var b = 0; b <atags.length; b ++) {atags [b] .onclick = function () {window.open (this.getAttribute ('href'))); this.removeAttribute ( 'HREF'); this.onclick = null;}; }} но не работает
  • 0
    @ user3214661 - я обновил ответ решением для одного тега.
0

Я читал это как

  1. Нажмите на ссылку
  2. Ссылка открывает новую вкладку/окно
  3. Ссылка отключена

Следовательно

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);
});
0

вы не можете установить одинаковые идентификаторы для элементов - идентификатор должен быть уникальным на одной странице. если вы хотите удалить определенную ссылку, вы можете установить их CLASS и удалить по классу

в дополнение к другим ответам - u может удалить атрибут href всех посещенных ссылок, чем загружается страница

$(document).ready(function(){

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

});

или вы можете удалить href attr из теперь нажатой ссылки

$(document).ready(function(){

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

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

  });

});
  • 0
    Я знаю, что я использую разные идентификаторы для разных ссылок. Представьте, что у меня есть 20 ссылок с такими идентификаторами, как: id1, id2, id3 ... и т. Д. Итак, я хочу, чтобы при нажатии на одну ссылку идентификатора ссылка открывалась в новой вкладке и такой же идентификатор ссылки был отключен на исходной странице. Другие ссылки не тронуты.
  • 0
    перед тем, как редактировать вопрос, была ли другая информация? Итак, вы просто хотите отключить ссылку, которая была посещена, верно?
Показать ещё 2 комментария
0

Значит, вы в основном хотите, чтобы он работал только один раз? Что-то вроде...

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

Но обратите внимание, что использование встроенных HTML-событий (<a onclick="...">...</a>) - очень плохая практика. Поместите обработчики событий во внешний файл.

  • 0
    Да, но ваш код не работает так, как хотелось бы.
  • 0
    Я думаю, я не понимаю, эффект, который вы пытаетесь достичь, хотите объяснить это?
Показать ещё 3 комментария
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);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню