【问题标题】:Increase div id by 1 using jQuery使用 jQuery 将 div id 增加 1
【发布时间】:2012-11-06 01:15:12
【问题描述】:

如果您能提供任何帮助,我将不胜感激。我搜索了高低,但未能找到解决我认为可能是常见问题的方法。我对 ASP.NET MVC 和 jQuery 非常陌生,所以我可能需要一些额外的帮助。就这样吧……

我有一个由 foreach (ASP MVC 4) 创建的包含许多行的表。每行都有我想在点击时显示/隐藏的附加信息(包含在 a 中)。

例如:

====================================================================
   | Ticket Number | Date Created | Description

-    123456          11/02/2012     How do I...?
      --- Additional Information ---
      Assigned To: Joe
      Notes: Blah, blah
      --- End Additional Information ---
+     123457          11/01/2012     When I click this I get....
=====================================================================

当用户单击加号时(我正在使用图像),我希望扩展附加信息,并且希望将加号图像更改为减号图像。

我已经弄清楚如何使用 jQuery 中的 IF 语句更改图像。但是,我不太清楚如何正确切换 div。我尝试过使用以下方法:

   $("button").click(function () {
       $(this).next("div.toggleMe").toggle(1000);
   });

如您所见,jQuery 扩展了它找到的下一个 div。这个问题是我不能把它和表数据放在同一行。由于某种原因,它只是看不到下一个 div。

我正在寻找一种将 id 或 div 的类增加一个的方法,以便我可以使用类似以下 jQuery 函数的东西:

    function slideonlyone(thechosenone) {
         $('.newboxes2').each(function(index) {
              if ($(this).attr("id") == thechosenone) {
               $(this).slideDown(200);
              }
              else {
                   $(this).slideUp(600);
              }
         });
    }

<table>
   <tr>
      <td>
         <div style="border: 1px solid blue; background-color: #99CCFF; padding: 5px;">
            <a id="myHeader1" href="javascript:slideonlyone('newboxes1');" >slide this one only</a>
         </div>
         <div class="newboxes2" id="newboxes1" style="border: 1px solid black; background-color: #CCCCCC; display: block;padding: 5px;">Div #1</div>
      </td>
      <td>
         <div style="border: 1px solid blue; background-color: #99CCFF; padding: 5px;">
            <a id="myHeader2" href="javascript:slideonlyone('newboxes2');" >slide this one only</a>
         </div>
         <div class="newboxes2" id="newboxes2" style="border: 1px solid black; background-color: #CCCCCC; display: none;padding: 5px;">Div #2</div>
      </td>
      <td>
         <div style="border: 1px solid blue; background-color: #99CCFF; padding: 5px;">
            <a id="myHeader3" href="javascript:slideonlyone('newboxes3');" >slide this one only</a>
         </div>
         <div class="newboxes2" id="newboxes3" style="border: 1px solid black; background-color: #CCCCCC; display: none;padding: 5px;">Div #3</div>
      </td>
   </tr>
</table>

正如您在 HTML 中看到的,每个 div 都有一个唯一的 id。如何在 foreach 循环中创建唯一 ID?而且,我如何让 jQuery 看到那个唯一的 id 以便我可以切换 div?

非常感谢您提供的任何信息!

【问题讨论】:

  • 您知道$(this).attr("id") 可以写成this.id,还是使用jQuery 进行优化
  • 使用anchor上的类和$(this).closest('div').next('div')获取div。

标签: jquery asp.net-mvc foreach


【解决方案1】:

如果您的 HTML 结构如下:

<div>
    <button>Click me</button>
</div>
<div class="toggle">
    This is initially hidden content
</div>

然后从按钮的角度调用$(this).next('div') 不会找到您的第二个 div — 它被其父 div 绑定。你真正想做的是找到下一个 div 从按钮的父元素开始

$('button').click(function(){
    $(this).parent().next('div.toggle').toggle(1000);
});

使用上面的 HTML,脚本 sn-p 应该从按钮的父 div 开始搜索下一个 div。在这种情况下,它应该找到正确的元素来切换。

【讨论】:

  • 感谢您的快速回答。最后你把它卖给了我。这是我必须做的让它工作:' $("button").click(function () { $(this).parent().parent().parent().parent().next ("div.toggleMe").toggle(1000); }); ' 这是因为我在 table / tr / td 中有按钮。非常感谢!
  • 我上一条评论的格式不正确。在这方面仍然是菜鸟。但是,我确实有一个后续问题,是否有更有效的方法来做我在上面评论中提到的同样的事情?
  • 抱歉回复晚了。您可以做的是将选择器传递给 .parent() 调用,以便它遍历其祖先进行匹配(很像 .closest()。)如果您要查找的父 div 具有特定的类,例如,你可以这样做:$("button").click(function(){ $(this).parent("div.someclass").next("div.toggleMe").toggle(1000); }); 这里有一些关于.parent() 函数的文档:link 另外,代码的字符是一个“反勾号”,通常在数字“1”的左边键盘顶部。
  • 啊!这就说得通了。谢谢你的信息。非常感谢
  • 延迟更新:我指的是parents,而不是parent,在传递特定选择器时。
猜你喜欢
  • 2013-10-22
  • 2011-10-03
  • 2011-09-25
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
相关资源
最近更新 更多