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

0 javascript jquery cheerio

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

TypeError:Object#没有方法'attr'

我的代码是:

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

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>
Run Code Online (Sandbox Code Playgroud)

我可以通过使用$(this).attr("href")而不是element.attr("href")但我无法弄清楚原因.任何解释都非常感谢!

Ror*_*san 8

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

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

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

  • +但应该说比`element.href`返回绝对路径,如果它确实重要 (2认同)