我正在尝试检查多个列表项中的数据属性。
我的HTML:
<ul id="year">
<li id="2006">2006</li>
<li id="2007">2007</li>
<li id="2008">2008</li>
<li id="2009">2009</li>
<li id="2010">2010</li>
<li id="2011">2011</li>
<li id="2012">2012</li>
<li id="2013">2013</li>
<li id="2014">2014</li>
</ul>
这是jQuery:
jQuery('#year li').click(function()
{
var year = jQuery(this).attr('id');
if ((jQuery(this).data('state') === undefined) || (jQuery(this).data('state') == "off"))
{
jQuery(this).data('state', 'on');
}
else
{
jQuery(this).data('state', 'off');
}
});
现在我正在尝试检查是否有任何列表项,其中“state”==“on” 像这样:
if ((jQuery('#year li').data('state') == "on"))
但它似乎没有起作用......
编辑:所以我尝试了你给我的所有不同的片段:它们都没有用,所以我做了一个简单的for循环,看起来在每个列表点本身:
for ( var y = 2006, l = 2015; y < l; y++ )
{
if ((jQuery('#year #'+y).data('state') == "on"))
{
alert('data found');
}
另一个问题是我的代码之前没有任何事件! 感谢您的支持!
答案 0 :(得分:1)
您可以使用.filter()
,然后检查length
属性
var list = jQuery('#year li').filter(function(){
return $(this).data('state') == "on";
//OR, using native dataset
//return this.dataset.state == 'on'
});
if (list.length){
//li with state on exits
}
答案 1 :(得分:1)
WebElement element=driver.findElement(By.xpath("Your Xpath"));
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", element);
将返回一个jquery对象数组。
您需要循环jQuery('#year li')
一个
each
答案 2 :(得分:0)
这对你不起作用的原因是jQuery没有将数据值存储在&#34;标准&#34;元素数据集。您可以自己实现目标:
$('#year li').click(function() {
this.dataset.state = this.dataset.state === 'off' ? 'on' : 'off';
if($('#year li[data-state="on"]').length > 0) {
alert('Found!')
}
});
&#13;
#year li[data-state="on"] {
color: blue;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="year">
<li id="2006">2006</li>
<li id="2007">2007</li>
<li id="2008">2008</li>
<li id="2009">2009</li>
<li id="2010">2010</li>
<li id="2011">2011</li>
<li id="2012">2012</li>
<li id="2013">2013</li>
<li id="2014">2014</li>
</ul>
&#13;