【问题标题】:css selector using Cheerio exclusion of double class使用 Cheerio 排除双类的 css 选择器
【发布时间】:2013-02-07 19:34:54
【问题描述】:

我有一个相当“奇怪”的场景(网络抓取)。我只想选择class=g,但选择class="g g"(双类g)。如何在 jQuery 中做到这一点?

如果我使用 $('.g'),它将同时选择 .g.g .g

更新 1:

如果您认为.g .g 无效,请在 Google 搜索结果中查看源代码;)

【问题讨论】:

  • 我认为 class="g g" 不是有效的 HTML...
  • $(".g:not(.g.g)") 是做什么的?
  • $(".g:not(.g.g)") 没有选择任何内容。
  • 我在随机结果页面上没有找到任何.g.g
  • @JanDvorak 也许谷歌会随机弹出它

标签: html css dom jquery-selectors cheerio


【解决方案1】:

即使我认为g g 无效(让我检查一下)..因此$(".g:not(.g.g)") 不起作用,您也可以执行以下操作:

var myWeirdElements = $('.g').map(function(){return this.className.indexOf('g g') && this ;});

// or, as mentioned on the comment, using Array.filter method

演示 => http://jsfiddle.net/GeAaA/

编辑:关于第二条评论,你只需要计算多少 g(简单的正则表达式)

【讨论】:

  • 如果 OP 要求该元素不应该有多个 g 类并且任何元素都有 <div class="g n g"></div> 我们该如何处理?
  • @stecb 我忘了说,我不是“真的”使用 jQuery。它是 node.js 上的 Cheerio,所以 this.className 不存在。有什么好的替代品吗?
  • @HP。你绝对应该提到这一点。
  • @JanDvorak Yah 我认为 Cheerio 是节点上 jQuery 的翻版和替换,但我错了。很多情况下对象都不一样...
  • @HP "如何在 jQuery 中做到这一点?" .. 顺便说一句 this.className 不是 jQuery 是简单的普通 DOM
【解决方案2】:

考虑以下场景,您有两个具有上述类的 Div 标签

<div class="g"></div>

<div class="g g"></div>

编写以下内容以仅获取具有类“g”的那些 div

alert($("div[class='g']").length);

【讨论】:

  • 如果它运行良好,请将其标记为正确答案,快乐编码:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2021-07-31
相关资源
最近更新 更多