2

我是 jQuery 新手,我认为这个问题已经回答了很多次。但我不能建议如何找到它。在编写 jQuery 代码时,我经常编写重复选择器的结构:

if( $( ".someclass .someclass #someid" ).filter( ":visible" ) )
{
  $( ".someclass .someclass #someid" ).filter( ":visible" ).click();
  // This must be executed only if element was found.
  return;
}
// This must be executed only if first element not found
if( $( ".someotherclass #someotherid" ).filter( ":hidden" ) )
{
  $( ".someotherclass #someotherid" ).filter( ":hidden" ).show();
  return;
}

如您所见,选择器文本是重复的。有没有办法在“if()”中重用最后匹配的选择器的结果?例如,类似:

if( $( ".someclass .someclass #someid" ).filter( ":visible" ) )
{
  $( ":last-result" ).click();
  return;
}
if( $( ".someotherclass #someotherid" ).filter( ":hidden" ) )
{
  $( ":last-result" ).show();
  return;
}
4

2 回答 2

3

简单地不要测试,如果没有匹配的元素,这不会产生任何错误:

$( ".someclass .someclass #someid:visible").click();

话虽这么说,因为您只能拥有一个具有给定 id 的元素,您可能应该使用

$("#someid:visible").click();

现在,假设你真的想做一个测试,那么你可以使用

$("#someid:visible").each(function(){
     var $element = $(this);

     // use $element

});

另一个基本解决方案是在测试之前缓存您的元素:

 var $element = $("#someid");
 if ($element.is(":visible")) {
     // use $element
 }
于 2013-04-05T16:11:40.113 回答
1

如果你真的只想在元素存在的情况下做某事

$('element').length == 0; // no element found

通过使用该.length属性,我们可以测试元素是否存在,或者是否已在页面中找到。

阅读更多

于 2013-04-05T16:17:24.893 回答