jquery 最接近的函数无法与 addClass 一起使用

发布于 2024-10-12 08:02:14 字数 1106 浏览 1 评论 0原文

我对 jquery 最接近的函数有问题。 我想制作一个菜单,您可以在其中单击多个项目。 我想知道的是: 如果有人单击菜单中已选定的项目,则刚刚取消选择的项目前面是否有选定的项目。 我找到了最接近的函数,如果存在与选择器匹配的 dom 对象,则返回 1;如果不存在,则返回 0。 因此,我添加为每个单击的菜单项选择的类,并在再次单击时将其删除。

当您单击menu_2,然后单击menu_3,然后再次单击menu_3时,最接近的值应该是1,因为在我刚刚取消选择的项目前面有一个选定的项目。

但这不是我的小脚本的结果,也许你知道一些事情?

问候, Peter

   $('li').click(function()
     {
      if ($(this).hasClass('selected'))
      {
       $(this).removeClass('selected');
       alert($(this).closest('.selected').size());
      }
      else
      {
       $(this).addClass('selected');
      }
   });

  .selected
  {
   background-color: red;
  }

<ul>
<li>menu_1</li>
<li>menu_2</li>
<li>menu_3</li>
<li>menu_4</li>
<li>menu_5</li>
</ul>

这是我的结构:

menu_0 <- selected
 menu_0_0
 menu_0_1
 menu_0_2 <- selected
   menu_0_2_0
   menu_0_2_1 <- selected
menu_1
...

现在我取消选择menu_0_2_1,并且最接近的函数应该给我DOM对象menu_0_2,因为这是具有“selected”类的最接近的对象,如上例所示。

i have problem with the closest function from jquery.
i want to make a menu where you can click several items.
what i want to know is:
if someone clicked an already selected item in the menu, is there a selected item in front of the just deseleceted item.
i found the closest function which gives back 1 if there is a dom object which matches the selector and 0 if there is non.
so i add the class selected for every clicked menu item and remove it when it gets clicked again.

when you click menu_2, then menu_3, then again menu_3 the closest value should be 1 because there is a selected item in front of the one i just deseleceted.

but this is not the result of my little script, maybe you know something?

regards,
peter

   $('li').click(function()
     {
      if ($(this).hasClass('selected'))
      {
       $(this).removeClass('selected');
       alert($(this).closest('.selected').size());
      }
      else
      {
       $(this).addClass('selected');
      }
   });

  .selected
  {
   background-color: red;
  }

<ul>
<li>menu_1</li>
<li>menu_2</li>
<li>menu_3</li>
<li>menu_4</li>
<li>menu_5</li>
</ul>

this is my structure:

menu_0 <- selected
 menu_0_0
 menu_0_1
 menu_0_2 <- selected
   menu_0_2_0
   menu_0_2_1 <- selected
menu_1
...

now i deselect menu_0_2_1 and the function closest should give me the DOM object menu_0_2, because this is the closest object which has the class "selected" as seen in the example above.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我偏爱纯白色 2024-10-19 08:02:14

您对 closest() 的用途感到困惑:

获取第一个祖先元素
匹配选择器,从
当前元素和进展
通过 DOM 树。

如果您也想获取兄弟姐妹,请使用 siblings(),如果您想立即使用 next() ..etc:

$(document).ready(function() {
    $('li').click(function() {
        if ($(this).hasClass('selected')) {
            $(this).removeClass('selected');
            alert('Closest: ' + $(this).closest('.selected').length);
            alert('Siblings: ' + $(this).siblings('.selected').length);
        }
        else {
            $(this).addClass('selected');
        }
        return false;
    });
});

示例链接return false; 在这里很重要,可以防止气泡效应!

You are getting confused by the purpose of closest():

Get the first ancestor element that
matches the selector, beginning at the
current element and progressing up
through the DOM tree.

If you want to get the siblings too, then use siblings(), if you want the immediate next use next() ..etc:

$(document).ready(function() {
    $('li').click(function() {
        if ($(this).hasClass('selected')) {
            $(this).removeClass('selected');
            alert('Closest: ' + $(this).closest('.selected').length);
            alert('Siblings: ' + $(this).siblings('.selected').length);
        }
        else {
            $(this).addClass('selected');
        }
        return false;
    });
});

Example link. The return false; is important here to prevent the bubble effect!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文