Jquery查找所有除了...之外的元素

3

我有以下HTML代码:

<div id="123" class="test">
   <div class="testMessage">Foo</div>
   <div><div class="testDate">2010</div></div>
   <div id="127" class="test">
      <div class="testMessage">Bar</div>
      <div><div class="testDate">2011</div></div>
   </div>
</div>

我有以下JS/jQuery代码:

$(".test").find(".testDate").val("cool 2010");

如何更改JS/jQuery以查找“testDate”类元素,但不在子“test”类块中查找?不使用children方法。 P.S. 我只知道类名,我不知道可以嵌套多少个div。

2
123 不是一个有效的ID;ID不能以数字开头。 - pimvdb
为什么?我知道变量名,但它是标签的属性(字符串),不是吗? - Mirgorod
2
您的示例HTML无效,<div class="class="test"> - a'r
1
@Mirgorod:规范如此规定:http://www.w3.org/TR/html401/types.html#type-name。 - pimvdb
我认为规范要求这样做是因为有些语言会检查变量开头是否为数字,作为可能省略运算符的标志。在大多数语言中,您不能定义名为“3”的变量,“3a”可以被人类解读为“3 * a”,而“a3”则没有同样的歧义。 - Jason Sperske
由于所有内容都包裹在一个类名为“test”的 div 中,这并不容易。 - yoozer8
4个回答

5

更新

这可能是我写过的最奇怪的选择器:


(注意:此处无需翻译HTML标签,直接保留即可)
$("div.test").not(':has(> .test)').siblings().find('.testDate').text('cool 2010');

示例:http://jsfiddle.net/mrchief/6cbdu/3/

解释:

$("div.test")             // finds both the test divs
  .not(':has(> .test)')   // finds the inner test div
  .siblings()             // get all other divs except the inner test div

但是 <div><div class="testDate">2010</div></div> (2个 div) - Mirgorod
哦,这就是我在寻找的!谢谢! - Mirgorod

2
尝试使用html()方法设置内部HTML或text(),因为
元素没有值属性。
$("div.test :not(.test)").find(".testDate").html("cool 2010");

如果您可以将主div的id修改为"_123",您就可以直接使用id选择器,如下所示:
$("#_123 > div.testDate").html("cool 2010");

@Mirgorod - 你试过用id了吗? - ShankarSangoli
$("#123").find(".testDate:first").text("cool 2010"); - 这个可以工作! - Mirgorod
你可以尝试使用 $("#123 > div.testDate:first").text("cool 2010"); - ShankarSangoli

1

0

每当您尝试选择 $('.test') 时,它都会抓取所有 class='test' 的元素。您需要从最外层的 body 标签开始:

$('body').children('.test').children(':not(.test)').find('.testDate').text('cool 2010');


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