JQuery子选择器问题

5

我的HTML

<div id="x">
  <div id="x1">
    some text
    <div>other text</div>
  </div>
  <div id="x2">just text</div>
<div>

我的呼叫

我有一个元素,它可以是任何jQuery选择器,可以是1个或多个元素:

var x = $("#x");

现在我需要一个插件(它将发现像选项卡这样的内部元素)仅浏览第一个DIV元素而不是其子元素。我正在尝试...

$.each($($("div"), x), function() {
  alert($(this).html());
});

显示: 1. 一些文本其他文本 2. 其他文本 3. 只是文本

$.each($($("div"), x).siblings(), function() {
  alert($(this).html());
});

显示: 1. 只有文字 2. 一些文字和其他文字

这是最接近的,但我需要正确的顺序。有什么建议吗?谢谢。

附:由于这是一个插件,所以我无法做到这一点。

$("#x", "div....")

我需要做这个

#(newselector, x)
3个回答

10
如果您不能使用 $("#x > div"),因为它应该与您想到的所有选择器一起工作,那么假设您将特定的选择器定义为变量 x:
var x = $('#x');

// this will select only the direct div children of x whatever the x is
x.children('div');

这正是我所需要的,谢谢。以前从未见过$().children这种方式。 - Rodrigo Asensio

1

这个方法将会给你一个 div 元素内所有的文本:

x.children('div').each(function() {
  alert($(this).text());
});

如果您不想从多个子div中组合所有文本,您可以仅访问每个直接文本节点:

x.children('div').each(function() {
  alert(this.childNodes[0].nodeValue);
});

注意:假设x是由var x = $('#x')定义的Jquery元素。

1

使用:

$("#x > div")

将其作为您的选择器 - 它只会选择ID为xdiv的直接子元素。


嗨,伙计,我说我不能使用$("#x"),因为这是一个插件,而且$("#x")可以是任何类型的选择器,它可以是$("*")。 必须使用$(selector, jqueryobj)来完成 谢谢。 - Rodrigo Asensio
@Rodrigo:答案仍然是>。你可以像这样使用它:$('> div', jqueryobj) - Ken Browning

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接