Как я могу получить ссылки на странице, которые имеют определенное слово в них с помощью JavaScript - PullRequest
2 голосов
/ 21 мая 2009

Я пытаюсь получить ссылку, содержащую слово на странице, и обновить их на другой странице в букмарклете.

Вот код, который я не получаю для работы с букмарклетом:

   javascript:
        for (i=0; i < document.links.length; i++) {
     if(document.links[i].href.match('exampleword')) {
    location.href = 'http://google.com/exampleword'; 
}
}

Почему это не работает?

Ответы [ 2 ]

2 голосов
/ 21 мая 2009

Грег понял, что вам действительно нужна ссылка " label ", а не href URL. Но я бы взял все элементы с getElementsByTagName ('A') . Затем выполните итерацию по их firstChild узлам.

Подобрать ' nodeValue ' из ' firstChild ' так же просто, как получить innerHTML или (innerText, который кто-то упомянул, который менее поддерживается).

Вот минимальный пример: слова «word1», «word2» и «word3».

Я просто добавлю, что если вы хотите ограничить количество просматриваемых ссылок для этого подмножеством ссылок на странице или сайте, вы можете различать их другими способами, установив конкретное имя класса для ссылок, которые вы хотите поиск. Было бы немного усложнить проверку className ссылок, которые вы захватили. При этом простая итерация узла:

Пример:

<html>
<head>
<title>JavaScript match link label</title>
<script type="text/javascript">
var keywords = ['word1','word2','word3'];
function linklabels() {
    var aels = document.getElementsByTagName && document.getElementsByTagName('A');
    var aelsCt = aels.length;
    var keywordsCt = keywords.length;
    for (var i = 0; i < aels.length; i++) {
        var v= aels[i].firstChild.nodeValue;
            //this is the link label, the text seen as the link
        for (var j=0; j < keywordsCt; j++) {
            var re = new RegExp(keywords[j]); 
            if (re.test(v)) {
                alert('refreshing to http://google.com/' + v);
                //window.location.href = "http://google.com/" + v;
            }
        }
    }
}
window.onload=linklabels;
</script>
</head>
<body>
<p><a href="#">word1</a> | <a href="#">word2</a> | <a href="#">word3</a>
<br /><a href="#">word1</a> | <a href="#">word2</a> | <a href="#">word3</a></p>
</body>
</html>
1 голос
/ 21 мая 2009

Вы проверяете, содержит ли ссылка href слово - из вашего вопроса это звучит так, как будто вы хотите привязать текст (то есть слова, на которые вы нажимаете). Самый простой способ (хотя и не точный на 100%, если <a> содержит другие теги) такой:

if (document.links[i].innerHTML.match('exampleword'))
...