如何在jQuery中搜索self

时间:2017-03-06 09:04:48

标签: jquery

我有一种情况,其中选择器是变量,通常用于在先前定义的容器中搜索,但是是否可以通过这种方式构造选择器以指向此元素?换句话说,需要选择器在下面的行中等于获取容器作为结果?

$(selector, container) 

提供更多信息。该行在某些功能中使用,我正在寻找适用于所有情况的代码。所以我们假设我们有html如下

<div class='container'>
  <div class='some-element'>
  </div>
  <div class='some-other-element'>
  </div>
</div>

脚本如下。我知道在函数体中放一些ifs可以说“if selector =='self'”或类似的东西,但我想知道是否有一些更优雅的内置jquery方式?

var container = $('.container');
...
do_something = function(selector) {
   var element = $(selector, container);
   ...
}

do_something('.some-element');
do_something('.some-other-element');
do_something('self?'); // <<<< problem

4 个答案:

答案 0 :(得分:0)

jQuery使用CSS选择器。由于CSS没有上下文的概念,我认为没有办法将 self 表达为选择器。

此外,$(foo, bar)等于$(bar).find(foo)。但后者只是finds descendants

  

获取当前匹配元素集中每个元素的后代,由选择器,jQuery对象或元素过滤。

答案 1 :(得分:0)

  

需要选择器在下面的行中等于获取容器作为结果

您可以使用.closest()方法:

$(selector).closest(container)

获取 容器 ,其中包含 选择

除了在您的选择器中,您可以使用.parent()来获取容器但不是一个好主意

var selector = $('.selector'),
  container = $('.container'),
  con = $(selector, container).parent();

console.log(con[0]);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  container
  <div class="selector">selector</div>
</div>

答案 2 :(得分:0)

首先,您通过选择器找到一个元素:

var el = $("someSelector");

如果container是此元素的直接父元素,您可以这样找到它:

var container = el.parent();

如果没有,您可以遍历父元素,直到找到某个特定元素:

var container = el.closest("containerSelector");

您可以将这些操作合并为一个语句:

$("someSelector").parent();
$("someSelector").closest("containerSelector");

答案 3 :(得分:0)

我发现'addBack'对我来说是新的,但它的工作方式是它最后的结果,在这种情况下是.find('。container')的结果,因为FabianKlötzl指出的是alias of $(,'。container')。 https://api.jquery.com/addBack/

var container = $('.container');

do_something = function(selector) {
   var element = $(selector,container).addBack(selector);
   // just to show it works
   $('.results').append($(element).attr('class')+"<br/>")
}

do_something('.some-element');
do_something('.some-other-element');
do_something('.container');

https://jsfiddle.net/adax2000/3qLs6o7w/5/