【发布时间】:2017-08-06 06:24:07
【问题描述】:
我在我的 rails 应用程序上使用 nokogiri gem 来获取一些 html 节点。我正在按类获取我的 div。但是这个类名有时会改变。例如,现在我是这样理解的:
doc.css("div.t.m0.x15.h3.ff2.fs1.fc0.sc0.ls0.ws1")
例如,“x15”可以是“x13”。我可以这样做:
doc.css("div.t.m0.x13.h3.ff2.fs1.fc0.sc0.ls0.ws1", "div.t.m0.x15.h3.ff2.fs1.fc0.sc0.ls0.ws1")
这可行,但我认为设置一个范围会更好,比如 x13-x15,所以如果它是 x14,我不需要保持那么冗长。
关于如何做到这一点的任何提示?谢谢!
编辑:
我不能删除 "x*" 类,因为有另一个 div 具有相同的另一个类,所以这两个元素的区别在于 "x" 类。另一个是xa,xb;而我想要得到的是 x13, x15。
【问题讨论】:
-
你能不能不做
doc.css("div.t.m0.h3.ff2.fs1.fc0.sc0.ls0.ws1")(没有x13或x15)然后检查所选元素是否也有x\d\d类? -
也许您可以使用不受更改影响的选择器来定位 div?你的标记看起来如何?为什么班级会变? "x15 can be x13" 似乎有点武断。
-
不能那样做,更新了问题。如果我删除 x* 类,我会得到另一个元素
-
我从来没有用过 Nokogiri 但你不能先用
classes_to_select = ['.x15', '.x13']然后doc.css(*classes_to_select.map { |c| "div#{base_classes}#{c}" })吗?其中base_classes = '.t.m0.h3.ff2.fs1.fc0.sc0.ls0.ws1' -
@MrYoshiji 是的,那将是一个不错的选择。但是首先想知道是否有某种方法可以使用正则表达式来做到这一点。如果没有,我会接受你的回答!
标签: ruby-on-rails ruby nokogiri