Переопределить поведение по умолчанию для объектов link ('a') в Javascript

Я не знаю, возможно ли то, что я пытаюсь выполнить. Я хотел бы переопределить поведение по умолчанию для всех якорных объектов (тег A) для данной HTML-страницы. Я знаю, что могу пропустить все элементы A и динамически добавлять вызов onclick к каждому из них из метода body onload, но я ищу более абсолютное решение. Мне нужно, чтобы все элементы A получили назначение onclick, которое вызывает метод, передающий свойство element href в качестве аргумента, поэтому следующее:

<a href="#" onclick="location.href='http://domain.tld/page.html'; return false;">

Динамически становится:

<a href="#" onclick="location.href='http://domain.tld/page.html'; return false;" onclick="someMethodName('http://domain.tld/page.html'); return false;">

Как я уже сказал, идеальным способом сделать это было бы как-то переопределить класс Anchor вообще при загрузке документа. Если это невозможно, я прибегну к методу элементов loop-through-all A (который я уже знаю, как это сделать).

Ответы

Ответ 1

Если вы не хотите перебирать все элементы привязки, вы можете просто использовать делегирование событий, например:

document.onclick = function (e) {
  e = e ||  window.event;
  var element = e.target || e.srcElement;

  if (element.tagName == 'A') {
    someFunction(element.href);
    return false; // prevent default action and stop event propagation
  }
};

Проверьте приведенный выше пример здесь.

Ответ 2

Использование jQuery:

$(function() {
    $("a").click(function() {
        return someMethodName($(this).attr('href'));
    });
});

function someMethodName(href)
{
    console.log(href);
    return false;
}

Ответ 3

window.onload = function() {
    var anchorElements = document.getElementsByTagName('a');
    for (var i in anchorElements)
        anchorElements[i].onclick = function() {
            alert(this.href);
            return false;
        }
}

Это про самый простой способ сделать это. Оберните в <script type="text/javascript">...</script> в головке документа, и он будет работать при загрузке страницы.

Ответ 4

Невозможно переопределить все элементы привязки onlick. Вы можете добавить onclick к телу документа и иметь логику, чтобы увидеть, если четное распространение от элемента привязки, и выполнить событие в этом случае, но это решение может вызвать проблемы, если ваша страница является сложной и не распространяется на клики в некоторых случаях.

Я бы придерживался решения getElementsByTagName, если это возможно.

Ответ 5

Не используйте случай, если вам нужно обработать несколько событий. Используйте вместо строковой композиции, чтобы построить путь к функции, которая должна быть вызвана. Для этого требуется, чтобы прототип добавлялся к вашим элементам "A", которые определяют по умолчанию и строку, которая должна быть составлена. Атрибут данных для элемента должен иметь возможность переопределять значение по умолчанию. По сути, мы просто хотим, чтобы сообщение и действие проходили по умолчанию и были декларированы в разметке декларативно. Указанное действие должно быть опубликовано где-то как API или другая доступная библиотечная функция и может быть вызвана lib ['funName']. Просто дайте ему атрибут, не беспокойтесь о имени или id. Прототип и атрибут будут полезны для debounce, потому что вам придется отказаться.