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