2014-06-30 70 views
0

我想查询特定元素。Angularjs量角器:排除嵌套元素的有效选择器

我的代码结构如下:

HTML

<ul class="main"> 
    <li>...</li> 
    <li>...</li> 
    <li> 
     <ul class="to--exclude"> 
      <li>...</li> 
      <li>...</li> 
     </ul> 
    </li> 
    <li>...</li> 
    ... 
</ul> 

我想测试的主要class but not for李的which are inside到exclude`类中li's存在。

问题是如果我使用element(by.css('.main li')),它会找到所有li's,包括to-exclude类中的那些。

Chrome的开发者工具,我能够找到他们究竟使用jQuery的:not.not()。虽然在量角器使用它作为

element(by.css('.main li').not('ul.to--exclude li')); 
// OR 
element(by.css(".main li:not('ul.to--exclude li')")); 

上述代码

$('.main li').not('ul.to--exclude li') 
// OR 
$(".main li:not('ul.to-exclude li')"); 

给出一个错误:

InvalidElementStateError: invalid element state: Failed to execute 'querySelectorAll' on 'Document': '.main li:not('ul.to--exclude li')' is not a valid selector. 

如何完成在量角器相同。如何排除嵌套在父定位器类中的一些类。

感谢

+0

jQuery的':不()'是从不同的CSS ':not()' - 参见[为什么我的jQuery:not()选择器不能在CSS中工作?](http://stackoverflow.com/questions/10711730/why-is-my-jquery-not-selector-not -css) – BoltClock

+0

还要注意你的HTML是无效的,你不能直接在'ul'中有'ul'。为了嵌套列表,你必须在'li'中包含'ul'。 – BoltClock

回答

3

你应该能够做到这一点与CSS伪类:not这样的:

element(by.css(".main > li > ul:not(.to--exclude) li, .main > li)")); 

我想补充.main > li作为备用选择,因为它似乎要选择所有儿童li s在.main之下。这种选择是有道理的,这样的情况:

<ul class="main"> 
    <li>...</li> 
    <li>...</li> 
    <li> 
     <ul class="to--exclude"> 
      <li>...</li> 
      <li>...</li> 
     </ul> 
    </li> 
    <li> 
     <ul class="to--include"> 
      <li>...</li> 
      <li>...</li> 
     </ul> 
    </li> 
    ... 
</ul> 

如果没有其他ul就像.to--include你可以减少选择到:

element(by.css(".main > li)")); 
+1

请注意,这里假设'ul'元素只能嵌套到一层深度。如果你有更多的嵌套'ul'元素,你将无法使用':not()'来过滤它们 - 请参阅[CSS:not()选择器是否应该与远处的后代一起工作?](http:// stackoverflow.com/questions/20869061/is-the-css-not-selector-supposed-to-work-with-distant-descendants) – BoltClock