【问题标题】:Group Selected Elements: document.querySelectorAll对选定元素进行分组:document.querySelectorAll
【发布时间】:2015-05-23 00:38:25
【问题描述】:

您好,如果我遇到这样的情况,如何对 document.querySelectorAll 进行分组:

<div>
 <p class="flower">Flower 1</p>
 <p class="bee">Bee 1</p>
 <p class="tree"></p>
</div>

<div>
 <p class="flower">Flower 2</p>
 <p class="dude"></p>
 <p class="snow-leopard"></p>
</div>

<div>
 <p class="flower">Flower 3</p>
 <p class="tree"></p>
 <p class="mountain"></p>
 <p class="wizard"></p>
 <p class="bee">Bee 3</p>
</div>

我总是想选择花,如果有蜜蜂我想让它附在花上,其他的我不关心。花和蜜蜂在 div 中没有特定的顺序,并且有些情况下没有蜜蜂。还假设花和蜜蜂有一个类,但结构的其余部分不像示例中那样干净。到目前为止,我唯一的解决方案是升级几个级别,然后使用正则表达式。最后,我想将它们都包含在一个 json 中:

[{flower: "yellow", bee:"bumblebee"},...]

这种方法:

var flowers = document.querySelectorAll(flower);
var bees = document.querySelectorAll(bee);

然后在这两个数组上进行迭代是行不通的。

【问题讨论】:

  • 不完全确定你想用 JSON 做什么,你应该在哪里得到 flower: "yellow" 中的“黄色”?
  • 无论如何,这就是您查询所有具有“bee”和“flower”类的元素的方式:document.querySelectorAll(".flower, .bee")

标签: javascript css-selectors casperjs selectors-api


【解决方案1】:

问题是你不能简单地用 CSS 选择器来匹配花朵和蜜蜂。您需要遍历所有花并找到蜜蜂兄弟(如果有的话)。一种方法是获取花的父母,然后寻找蜜蜂。

var obj = Array.prototype.map.call(document.querySelectorAll(".flower"), function(f){
    var node = {flower: f.textContent};
    var bee = f.parentNode.querySelector(".bee");
    if (bee) {
        node.bee = bee.textContent;
    }
    return node;
});

【讨论】:

  • 这是真的。尽管选择器.flower ~ .bee 代表了这两个元素,但其中只有一个是主题,并且只有主题将成为目标。虽然选择器 list .flower, .bee 将两个元素都表示为每个选择器的主题,但它根本不代表任何类型的关系。
猜你喜欢
  • 2022-07-09
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多