0

我在node.js 上使用cheerio(即jQuery 服务器端)来解析网页。尝试获取href元素的属性时,出现以下错误:

TypeError: Object # has no method '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")但我不知道为什么。任何解释都非常感谢!

4

2 回答 2

9

element传递给处理程序的变量each()是一个本机 JS DOM 元素,它没有该attr()方法。您需要将其转换为 jQuery 对象才能attr()在其上使用:

$('#commandes_pagination li a').each(function(index, element) {
    console.log($(element).attr('href'));
});

console.log(element.href);或者,如果要保留本机对象,可以使用。

于 2014-05-22T12:53:47.233 回答
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 对象。

于 2014-05-22T13:00:32.983 回答