【问题标题】:jquery selector doesn't give all elements [duplicate]jquery选择器没有给出所有元素[重复]
【发布时间】:2026-01-02 01:15:01
【问题描述】:

在下一个网页中,我想用 Jquery 选择所有 <li> 元素。 我想选择<ul class=search-result-gridview-items">里面的所有产品 https://www.walmart.com/browse/home-improvement/air-quality/1072864_133032_1231459

我试过了:

$(".search-product-result ul li")
$("ul.search-result-gridview-items li")

我也试过了:

$("li")
$("ul li")
$("section li")

选择所有<li> 并且没有工作。 他们都给了一个<li>,而不是全部。

为什么会这样?

【问题讨论】:

  • 在链接的网页上,您确定 jQuery 已加载并且 $ 不是其他东西的别名吗?
  • 如果您使用的是 Chrome 开发工具控制台,$ 相当于 document.querySelector() 并且只会返回 first 元素。如果您加载了实际的 jQuery,您的选择器将返回所有相应的元素。 jQuery 可能根本没有加载到他们的页面上。看到这个question
  • 也发布 html :)
  • 接近投票:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及重现它所需的最短代码问题本身。 无法重现您的问题,因此任何答案充其量都是推测性的(幸运的猜测)。另请阅读minimal reproducible example
  • 如果比较两个不同页面的来源,第二个引用了jQuery,而第一个引用了没有。这可能意味着第一页根本加载 jQuery,这就是为什么第一页的行为不同的原因。

标签: javascript jquery html css


【解决方案1】:

因为网站没有使用 jQuery。 console.log(window.jQuery)返回未定义

很可能 $ 绑定到某个函数

您可以使用 vanila javascript 来获取所有元素

document.querySelectorAll('ul.search-result-gridview-items li')

【讨论】:

    【解决方案2】:

    如果这是您站点中的实际 HTML 代码,则问题很可能出在 <ul> 上的类声明上。

    当它应该是 <ul class="search-result-gridview-items"> 时,您已将其标记为 <ul class=search-result-gridview-items">

    您缺少类名前的双引号。

    【讨论】:

    • 这并不能解释为什么 $("li") 只产生一项。
    • @NiettheDarkAbsol 它可能会这样做 - 如果丢失引号之后的所有内容都被解析为一个大长字符串。
    • 没有看到 OP 正在使用的 HTML 的完整示例,这是一个有争议的问题。我们最终在猜测。
    • 如果 Chrome 开发工具与 $ 一起使用,如果未加载 jQuery,$ 的作用与 document.querySelector() 相同,仅返回第一个元素。 Walmart 使用 React,甚至可能没有加载 jQuery。
    • @AlexanderStaroselsky Edge 也实现了这一点。
    【解决方案3】:

    在做 $('.search-result-gridview-items').children 似乎对我有用

    【讨论】:

      【解决方案4】:

      您是否尝试过使用子选择器(“父>子”)?

      $( ".search-product-result > li" )
      

      在此处查看更多信息: https://api.jquery.com/category/selectors/hierarchy-selectors/

      【讨论】:

      • ul 具有类search-result-gridview-items,因此search-product-resultul 的父级,因此这不起作用,因为li 必须是@987654328 的直接子级@.