为什么.attr()对$(this)起作用,但不对每个()的参数起作用?

时间:2014-05-22 12:52:45

标签: javascript jquery cheerio

我在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")来实现它,但我无法弄清楚原因。任何解释都非常感谢!

2 个答案:

答案 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对象。