Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery中是否有.findUsingParent()函数?_Javascript_Jquery_Html_Css - Fatal编程技术网

Javascript jQuery中是否有.findUsingParent()函数?

Javascript jQuery中是否有.findUsingParent()函数?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,div.tabs是选项卡控件的容器div.tab是一个单独的选项卡,是div.tabs的子选项卡div.tab.active是当前显示的选项卡 .data是一个任意元素。它可以出现在任何div.tab中,也可以只出现在body中,如果它们不是.tab 任务: 如果存在.tabs,请选择.data作为.tab.active的子项 如果没有.tabs,请选择所有.data 我写了以下两个版本: // First version var data; if ($('.tabs

div.tabs
是选项卡控件的容器
div.tab
是一个单独的选项卡,是
div.tabs
的子选项卡<代码>div.tab.active是当前显示的选项卡

.data
是一个任意元素。它可以出现在任何
div.tab
中,也可以只出现在
body
中,如果它们不是
.tab

任务:

  • 如果存在
    .tabs
    ,请选择
    .data
    作为
    .tab.active
    的子项
  • 如果没有
    .tabs
    ,请选择所有
    .data
我写了以下两个版本:

    // First version
    var data;
    if ($('.tabs').length) {
        data = $('.tab.active .data');
    } else {
        data = $('.data');
    }
    // Section version
    var data = $('*');
    if ($('.tabs').length) {
        data = data.find('.tab.active');
    }
    data = data.find('.data');
但是我想知道是否有一个函数
s.findUsingParent(e)
,它从一组元素
s
中选择
e
的子元素:

// Expect
var data = $('data');
if ($('.tabs').length) {
  data = data.findUsingParent('.tab.active');
}
jQuery中有吗?
是否有纯css解决方案?

您可以使用
.filter()
函数来筛选父元素为
.tab的元素。活动的

var data = $('data');
if ($('.tabs').length) {
  data = data.filter(function(){
      return $(this).closest('.tab.active').length !=0;
   });
}

筛选器可以将选择器作为其参数。我希望
data.filter('.tab.active*')
的效率更高,而且更短。@Frax
data.filter('.tab.active*')
的工作原理就像一个charmIs指定的问题,只是一个简化的例子,还是实际问题?您的“第一个版本”似乎是比过滤更有效的解决方案,而且我的可读性更高。@Frax这几乎是最初的问题。依我的直觉,第一个版本更有效,但我不确定。我问这个问题的主要原因是我觉得第一个版本不够干。如果我重命名
.data
,我将不得不在两个地方进行更改。您可以尝试使用三元运算符
?:
,例如
数据=$($('.tabs').length?'.tab.active.data','.data'))
,如果重复
数据
会让您感到困扰。另一方面,我更关心
数据
值的不必要更改(第二版)然后重复这一点——我发现只赋值一次比做两次或多次要清楚得多——但这只是个人偏好。我甚至会考虑在函数-<代码>函数GETDATA()中包装这个函数{{if(…){返回……}{返回……} };var数据= GETDATA();< /C> >,但这似乎有点过于工程化了;