我在node.js上使用cheerio(即jQuery服务器端)来解析网页。
在尝试获取元素的href
属性时,我收到以下错误:
TypeError:对象#没有方法' attr'
我的代码是:
$('#commandes_pagination li a').each(function(index, element) {
console.log(element.attr('href'));
});
HTML是这样的:
<ul class="liste04" id="commandes_pagination">
<li>
<a shape="rect" title="" href="/refonte/account/ajax/orderlist/1" class="page_num page_active" id="commandes_page-1">1</a>
</li>
<li>
<a shape="rect" title="" href="/refonte/account/ajax/orderlist/2" class="page_num" id="commandes_page-2">2</a>
</li>
</ul>
我可以使用$(this).attr("href")
代替element.attr("href")
来实现它,但我无法弄清楚原因。任何解释都非常感谢!
答案 0 :(得分:8)
传递给element
处理程序的each()
变量是一个本机JS DOM元素,它没有attr()
方法。您需要将其转换为jQuery对象才能在其上使用attr()
:
$('#commandes_pagination li a').each(function(index, element) {
console.log($(element).attr('href'));
});
或者,如果要保留本机对象,可以使用console.log(element.href);
。
答案 1 :(得分:0)
好吧,我的第一个猜测是该元素不是jquery对象。我继续使用以下方式检查:
$('#commandes_pagination li a').each(function(index, element) {
console.log(element instanceof jQuery);
});
我发现我的猜测是正确的。 如果您特别想使用元素,那么您可以使用:
$('#commandes_pagination li a').each(function(index, element) {
console.log($(element).attr("href"));
});
你会看到它有效。您可以通过记录元素变量来获得相同的结果。你会看到它不是一个jquery对象。