所以我正在尝试开发自己的Chrome扩展程序。首次尝试,我想创建一个扩展,将页面中的所有链接收集到一个地方。
由于我不知道有哪种链接,我必须通过选择其属性来获取链接href
和链接文本。
链接$("a[href^='http']").eq(i).innerHTML
属性选择器工作正常,但我似乎无法使用我的代码获取链接文本。它总是返回undefined。这是我的代码:
$("a[href^='http']").eq(i)
(我是for循环中的变量,只是假装它是一些数字)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<body><a href="https://www.google.com/">link1</a><a href="https://www.google.com/">link2</a><a href="https://www.google.com/">link3</a>
</body>
<p id="log">Pretend this is the console: </p>
<script>
for (var i = 0; i < document.links.length; i++) {
document.getElementById("log").innerHTML += ($("a[href^='http']").eq(i).attr("href") + " (" + $("a[href^='http']").eq(i).innerHTML + ") / ");
}
</script>
</html>
应该返回元素,对吧?那我错过了什么?
这里有一个片段向您展示我的意思:
play
&#13;
答案 0 :(得分:0)
innerHTML是一个方法,而不是属性,使用它如下:$("a[href^='http']").eq(i).innerHTML()
为了澄清,.eq(i)
方法不返回DOMElement
,而是jQuery
对象。 jQuery对象具有innerHTML()
方法 - 它返回jQuery对象引用的元素内的html字符串。
在旁注 - 看到你正在寻找文本,而不是html,也许你真的会更好地使用.text()
方法?
答案 1 :(得分:0)
我假设下面的链接由选择器
重新调整-i
如果要检索链接文本,请尝试
<a href="http://chat.stackoverflow.com" class="js-gps-track" data-gps-track="site_switcher.click({ item_type:6 })">chat</a>
如果您想要检索链接网址,请尝试
$("a[href^='http']").eq(i).text()
答案 2 :(得分:0)
获取所有标记并对其进行迭代,您可以获得 href值作为以下代码:
$("body").find('a').each(function() {
console.log($(this).attr('href'));
});
答案 3 :(得分:0)
您可以按照以下方式获取上述代码。正如在注释中提到的那样,JQuery返回的是一个JQuery对象。要访问实际元素,请在JQuery对象之后使用索引。
$("a[href^='http']")[i].innerHTML
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<body><a href="https://www.google.com/">link1</a><a href="https://www.google.com/">link2</a><a href="https://www.google.com/">link3</a>
</body>
<p id="log">Pretend this is the console: </p>
<script>
for (var i = 0; i < document.links.length; i++) {
document.getElementById("log").innerHTML += ($("a[href^='http']").eq(i).attr("href") + " (" + $("a[href^='http']")[i].innerHTML + ") / ");
}
</script>
</html>