2017-03-06 35 views
0

我有一种情况,其中selector是变量通常用于在先前定义的容器中搜索的变量,但是否有可能通过这种方式构造选择器来指向此元素?换句话说,在下面的行中需要选择器等于以获得容器作为结果?我如何在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 
+0

请提供更多的信息是什么'selector'和'container'。 '$(selector,container)'将在'container'内搜索'selector' – Justinas

回答

0

jQuery使用CSS选择器。由于CSS没有上下文的概念,我不认为有办法将self作为选择器。另外,$(foo, bar)等于$(bar).find(foo)。但后者只是finds descendants

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

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>

0

首先,通过选择查找元素:

var el = $("someSelector"); 

如果容器是该元素的直接父,你可以这样找到它:

var container = el.parent(); 

如果没有,你可以父元素,直到找到一些特定的元素通过遍历:

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

你可以将这些操作组合到一个说法:

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

我发现“后加入”其新的给我,但它的工作原理把它添加到结果只是最后的结果的方式,也在这种情况下,FabianKlötzl指出.find('。container')的结果是$('。container')的别名。​​

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/

相关问题