我正在尝试使用.filter()函数过滤掉ElementArrayFinder中的元素。我已成功使用它通过检查特定子项是否存在来过滤元素,但不能反过来。这是HTML的片段:
<div class="krn_event krn_event_line0" unselectable="on" style="position: absolute; left: 477px; top: 161px; width: 84px; height: 32px; white-space: nowrap; overflow: hidden;">
<div unselectable="on" class="krn_event_inner">
<div class="entity advanced-renderer" id="shift_20111">
<span class="entity-title">9:00 AM - 7:00 PM</span>
<div class="entity-segments entity-type-shift">
<div class="entity-segment type-break" style="left:40%; width:5%"> </div>
</div>
</div>
</div>
<div class="krn_event krn_event_line0" unselectable="on" style="position: absolute; left: 58px; top: 236px; width: 71px; height: 32px; white-space: nowrap; overflow: hidden; cursor: pointer;">
<div unselectable="on" class="krn_event_inner">
<div class="entity advanced-renderer" id="shift_20121">
<span class="entity-title">7:00 AM - 3:30 PM</span>
<div class="entity-segments entity-type-shift">
<div class="entity-segment type-break" style="left:47%; width:5%"></div>
<div class="entity-segment type-transfer" style="left:52%; width:48%"></div>
<div class="entity-icons">
<i class="entity-icon icon-k-transfer"></i>
</div>
</div>
</div>
</div>
我只寻找像第一个块这样的元素,它们不包含&#39; .entity-segment类型 - 转换器&#39; div元素。不幸的是,循环不起作用,因为我需要解决isPresent()或。$$()。count()的承诺。这是我到目前为止使用的.filter()函数:
regShifts = shifts.filter(function(elem){
return elem.$('[class="entity-segment type-transfer"]').isPresent().then(function (ans){
return ans === false;
});
});
其中班次是页面上所有班次的列表。有人能指出我正确的方向还是告诉我这里出了什么问题?当此代码运行时,测试等待并且整个测试因FATAL ERROR而失败:CALL_AND_RETRY_LAST分配失败 - Javascript堆内存不足。它还提供了最后几个GC&#39;和JS stacktrace信息。感谢
编辑:忘了问,是否有一个.not()函数可以合并到这里?我知道EC.not(),但这只适用于我认为的浏览器功能。我做了一些关于CSS选择器的研究并尝试使用:not()但是我无法让它工作。
我有两种方法可以过滤掉我不想要的元素,最后得到所有可用元素的数组。或者,检查我选择的元素(shift)是否具有子元素,如果是,则选择不同的移位。后者似乎更难,因为很难实现承诺循环。非常感谢你们的任何帮助。
答案 0 :(得分:0)
当你说第一次阻止时,我不是100%清楚你尝试得到什么,买你可以使用:not()
css量角器。有点像...
$$('.entity-segment:not(.type-transfer');
这假设您期望多个匹配($$
),但如果没有,请使用$
css选择器。