Изменение href в теге HTML не работает - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть этот HTML-тег:

<a href="show_comments.php?id=6">(show comments)</a>

Я хотел бы изменить его href.Я использую jquery, но он не работает:

$('a[href="show_comments.php?id=6"]').attr('href', 'xyz.php');

Я также пытался с querySelectorAll:

document.querySelectorAll("a[href='show_comments.php?id=6']").setAttrtibute('href','xyz.php');

ОБНОВЛЕНИЕ:

Этобыла временная проблема.Использование $ (document) .ready (function () {});оба решения работают.

Почему эти решения не работают?Я хотел бы сделать это без jQuery, но любое решение приветствуется.

Ответы [ 3 ]

0 голосов
/ 24 ноября 2018

Попробуйте добавить идентификатор к этому элементу, а затем выбрать этот идентификатор в jQuery или путем воспроизведения JS

Предположим, что у тега есть идентификатор с именем changeUrl

$("#changeUrl").attr('href', 'xyz.php');

или

document.querySelector("#changeUrl").setAttrtibute('href','xyz.php');
0 голосов
/ 24 ноября 2018

решено: Это была проблема с синхронизацией.Используя $( document ).ready(function() {});, оба решения работают.

Проблема заключалась в том, что это атака CSRF, поэтому для успешной атаки необходимо загрузить html (тег, который я хотел изменить, был загружен после сценария JS).

0 голосов
/ 24 ноября 2018

Вам придется делать это индивидуально на каждом узле, когда вы используете querySelectorAll, потому что он возвращает вам NodeList, у которого нет метода setAttribute.Только узлы имеют этот метод:

document.querySelectorAll("a[href='show_comments.php?id=6']").forEach(node => node.setAttrtibute('href','xyz.php'))

РЕДАКТИРОВАТЬ: Если у вас есть только один узел, используйте document.querySelector

document.querySelector("a[href='show_comments.php?id=6']").setAttrtibute('href','xyz.php')

Загрузите JS непосредственно перед </body>, чтобы убедиться, что JS имеетдоступ к полному DOM

...