Jquery 不直接在dom路径中查找元素

Jquery 不直接在dom路径中查找元素,jquery,dom,Jquery,Dom,我有一个类似的dom结构(尽管要复杂得多) 132 clicky 142 clicky 152 clicky 正如您可以看到的那样,classremainingarn的div并不直接位于相关按钮的dom路径中 单击按钮时,如何将相对剩余div增加1?给公共父级一些有意义的类: <div class="meaningful"> <div> <div> <div class="remaining">152</div&g

我有一个类似的dom结构(尽管要复杂得多)


132
clicky
142
clicky
152
clicky
正如您可以看到的那样,class
remaining
arn的div并不直接位于相关按钮的dom路径中


单击按钮时,如何将相对
剩余
div增加1?

给公共父级一些有意义的类:

<div class="meaningful">
  <div>
    <div>
      <div class="remaining">152</div>
    </div>
  </div>
  <div>
    <button>clicky</button>
  </div>
</div>

您可以找到最近的父级,其中包含
。剩余的
div

$('button').click(function() {
    var $remain = $(this).closest(':has(div.remaining)').find('.remaining');
    $remain.text( parseInt($remain.text(),10) + 1);
});

演示

试着简化一下。给你的班级打电话
remaining-1
remaining-2
。。。。如果我这么做了,我怎么知道我想抓哪一个?由于我没有每个按钮的事件处理程序,所以我有一个全局事件处理程序来处理所有按钮。此外,rel attr已经在使用中。如果使用
parseInt
,请不要忘记传递基数!添加了基数,尽管我并不期望数字后面附加0。请使用最接近的,而不是我建议的双亲,这是为了做到这一点;)这应该是对@Felix答案的评论,因为它建立在它的基础上。现在,它是断章取义的,如果没有费利克斯答案中的建议,它就没有任何意义。。。这个答案毫无意义。我只是爱你,伙计。。从您提供的链接Gaby:the.closest()方法在向上搜索DOM树之前开始搜索元素本身,并在项目A与选择器匹配时停止搜索。因此,如果这应用于按钮onclick事件…@dementric,请密切注意DOM的升级<代码>。剩余的
不在dom中,因此它将永远找不到它。。。第二,OP要求找到一个div并增加它的值。。。附加div有什么帮助?另外,您可能是指
.append(“”)
,但这也不相关。@Dementic,一旦您改进了代码,我将相应地更改我的投票。。你的答案在那里有15分钟的评论,然后我否决了它并发表了评论。。我经常回到我投的反对票,检查答案的变化。。这不是针对个人的,我这样做是为了让浏览本页面的人了解什么可行,什么不可行……哈:)有趣的观点,哈利,但我同意德米的观点,有时候你宁愿删除-1,-2的答案,而不是再看一眼,甚至得到一个正确的答案分数!有点紧张,但很有趣!:)尽管这会起作用,但取决于结构的实际复杂性,
:has
与给定父类相比可能(相对)较慢。但这需要对真实结构进行测试。你从我这里得到+1:)。您还可以将函数传递给
.text()
$remaine.text(函数(i,v){return+v+1;})@Felix,是的,确实是。。你也从我这里得到了+1,因为我认为你的解决方案是最健壮的,但是我把这个贴在了我亲爱的朋友Felix nice的上面,以防OP结构不可修改…+1!伟大的代码。我会把这个问题问我的最爱。
$('button').click(function() {
    var $remaining = $(this).closest('.meaningful').find('.remaining');
    // change text...
});
$('button').click(function() {
   var remainingdiv = $(this).closest('.meaningful').find('.remaining');
   remainingdiv.html(parseInt(remainingdiv.html(), 10) + 1);
}
$('button').click(function() {     
    var workDiv = $(this).parents().find('.remaining').first();
    workDiv.text(parseInt(workDiv.text())+1);
}); 
$('button').click(function() {
    var $remain = $(this).closest(':has(div.remaining)').find('.remaining');
    $remain.text( parseInt($remain.text(),10) + 1);
});