如何在jQuery中搜索self

如何在jQuery中搜索self,jquery,Jquery,我有一种情况,选择器是一个变量,通常用于在先前定义的容器中搜索,但有可能以这种方式构造选择器以指向此元素吗?换句话说,下面一行中的选择器需要等于什么才能得到容器结果 $(selector, container) 提供更多信息。该行用于某些函数中,我正在寻找适用于所有情况的代码。假设我们有如下html <div class='container'> <div class='some-element'> </div> <div class='

我有一种情况,选择器是一个变量,通常用于在先前定义的容器中搜索,但有可能以这种方式构造选择器以指向此元素吗?换句话说,下面一行中的选择器需要等于什么才能得到容器结果

$(selector, container) 
提供更多信息。该行用于某些函数中,我正在寻找适用于所有情况的代码。假设我们有如下html

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

脚本如下。我知道可以在函数体中放置一些if,比如说“if选择器=='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
var-container=$('.container');
...
do_something=函数(选择器){
var元素=$(选择器,容器);
...
}
做点什么('.some element');
做某事(“.其他元素”);

做点什么(自我?);// jQuery使用CSS选择器。由于CSS没有上下文的概念,我不认为有一种方法可以将自我表达为选择器

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

获取当前匹配元素集中每个元素的子元素,并通过选择器、jQuery对象或元素进行筛选

在下面的行中,选择器需要等于什么才能得到容器结果

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

$(selector).closest(container)
获取包含选择器的容器


除此之外,您可以在选择器中使用
.parent()
获取容器,但这不是一个好主意:

var选择器=$('.selector'),
容器=$('.container'),
con=$(选择器,容器).parent();
console.log(con[0])

容器
选择器

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

var el = $("someSelector");
如果容器是此元素的直接父级,则可以如下所示找到它:

var container = el.parent();
如果没有,则可以遍历父元素,直到找到某个特定元素:

var container = el.closest("containerSelector");
您可以将这些操作合并到一条语句中:

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

我发现“addBack”对我来说是新的,但它的工作方式是将它添加到结果中的最后一个结果,在本例中,正如Fabian Klötzl指出的那样,.find(“.container”)的结果是$(,“.container”)的别名

var-container=$('.container');
do_something=函数(选择器){
var元素=$(选择器,容器).addBack(选择器);
//只是为了证明它有效
$('.results').append($(元素).attr('class')+“
”) } 做某事('某些元素'); 做某事(“.其他元素”); 做点什么(“容器”);

请提供更多信息,说明什么是
选择器
容器
<代码>$(选择器,容器)
将在
容器内搜索
选择器
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');