jQuery:仅当元素存在时如何执行某些操作?

标签 jquery

我是 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;
}

最佳答案

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

$( ".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
 }

关于jQuery:仅当元素存在时如何执行某些操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15838628/

相关文章:

javascript - jQuery中有没有类似MooTools的替代方法?

javascript - 检查网络服务器是否在线/离线

javascript - 用于添加和删除类的 Jquery 打开/关闭变量

javascript - 中间点击JS函数

html - 可以为成对的 div 设置相等的高度,但前提是浏览器宽度为 960 或更宽?

javascript - 重新加载(更新)d3.js 强制定向图保留旧的 JSON 数据

Windows 应用程序中的 Javascript/jquery

jquery - 使文本完美地适合 div(高度和宽度),而不影响 div 的大小

javascript - jQuery 移动 ListView 溢出不起作用

javascript - jQuery 元素在屏幕上的可见性