Я пытаюсь удалить одну ссылку с помощью javascript, но она не будет работать.
<a id="yes" target="_blank" href="http://google.com" onclick="this.setAttribute('href', '')">
Но он не может открыть Google по мере удаления ссылки. Я могу удалить другие ссылки, используя разные идентификаторы, но я хочу, чтобы тот же идентификатор ссылки был отключен после того, как ссылка открыта на новой вкладке
Вот способ применить эту логику ко всем вашим "а" тегам без 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;};
Я читал это как
Следовательно
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);
});
вы не можете установить одинаковые идентификаторы для элементов - идентификатор должен быть уникальным на одной странице. если вы хотите удалить определенную ссылку, вы можете установить их CLASS и удалить по классу
в дополнение к другим ответам - u может удалить атрибут href всех посещенных ссылок, чем загружается страница
$(document).ready(function(){
$("a:visited").attr("href", "#")
});
или вы можете удалить href attr из теперь нажатой ссылки
$(document).ready(function(){
$("a").click(function(){
setTimeout(function() {
$(this).attr("href", "#")
}, 300);
});
});
Значит, вы в основном хотите, чтобы он работал только один раз? Что-то вроде...
onclick="if (!this.wasClicked) { this.wasClicked = true; } else { this.removeAttribute('href'); }"
Но обратите внимание, что использование встроенных HTML-событий (<a onclick="...">...</a>
) - очень плохая практика. Поместите обработчики событий во внешний файл.
Любой обработчик onclick будет выполняться до выполнения действия по умолчанию, поэтому вы можете предотвратить действие по умолчанию из обработчика события.
Чтобы завершить действие по умолчанию, а затем предотвратить его при следующем щелчке, просто используйте свойство и сохраните логическое значение, которое будет отмечено при следующем нажатии:
document.getElementById('yes').addEventListener('click', function(e) {
if (this.prevented) e.preventDefault();
this.prevented = true;
}, false);
Чтобы применить это ко всем ссылкам, вы сделали бы
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);
}
onclick='this.removeAttribute('href'); return false;'
?