jquery detach 重新显示 div 内容时遇到问题

Posted

技术标签:

【中文标题】jquery detach 重新显示 div 内容时遇到问题【英文标题】:Having trouble with jquery detach reshowing div content 【发布时间】:2015-05-15 01:46:19 【问题描述】:

我很难理解 jquery detach,嗯,detach 部分没问题,它让内容回来我遇到了问题。基本上,我有基于复选框选择显示的 div,它们是基于第 n 行的交替样式,所以主要问题是当一行被隐藏时,它在技术上仍然存在,因此样式没有正确交替。我发现 jquery detach 正在寻找我的第 n 行问题的解决方案,这似乎是正确的方向,但我是新手并且遇到了麻烦。这是我的 javascript

$(document).ready(function () 

$(".classes input[type='checkbox']").click(function(e) 
       var innerTexthtml = $(this).parent("div.selection").children('label').text();
       var planWrap = $("div.plan."+innerTextHTML).parent();

       var detachedContent = $("div.plan."+innerTextHTML).parent();

       if ($(this).is(':checked'))
             planWrap.show();
             detachedContent.appendTo('div.plans-container');
       else
             planWrap.detach();
       
);
);

现在,当我取消选中要过滤的框时,行以样式正确显示,但是当我重新选中该框时,我的 div 没有回来。感谢您提供的任何帮助。

编辑:添加 HTML 的 sn-ps:

复选框代码:

<div class="speeds" id="int_div_id">
          <h4>Speeds:</h4>
          <div class="checks">
            <div class="selection">
              <input type="checkbox" id="10" name="chkSpeedType" value="10" checked="checked">
              <label for="10"><span></span>10</a></label>
            </div>

            <div class="selection">
              <input type="checkbox" id="20" name="chkSpeedType" value="20" checked="checked">
              <label for="20"><span></span>20</label>
            </div>

            <div class="selection">
              <input type="checkbox" id="30" name="chkSpeedType" value="30" checked="checked">
              <label for="30"><span></span>30</label>
            </div>

          </div>
        </div>

示例输出行(包装在计划容器 div 中):

<div class="plans-container">

<div class="plans plansSlider" id="listings">

  <div class="bundle-hide-me" id="default"><div class="plan-wrap">
        <div class="plan 10">
          <div class="items-wrap">
            <div class="items">

            // content of the div

            </div>
          </div>
        </div>
  </div>
</div>
</div>

编辑:期望的结果:

这是我希望页面表现的示例:

X 10   X 20   X 30

Result for 10 // style-a
Result for 10 // style-b
Result for 20 // style-a
Result for 20 // style-b
Result for 20 // style-a
Result for 30 // style-b
Result for 30 // style-a

如果没有选中一个框:

X 10   _ 20   X 30

Result for 10 // style-a
Result for 10 // style-b
Result for 30 // style-a
Result for 30 // style-b

如果重新检查:

X 10   X 20   X 30

Result for 10 // style-a
Result for 10 // style-b
Result for 20 // style-a
Result for 20 // style-b
Result for 20 // style-a
Result for 30 // style-b
Result for 30 // style-a

【问题讨论】:

可以添加html吗? planWrap , detachedContent 相同的缓存选择器? @guest271314,我不知道该放什么,如果我删除那条线它仍然可以正常工作以便它分离,但我无法让它回来 不完全确定预期的结果是什么,在这里?不确定两个html sn-ps 如何出现在文档中? .classes 元素没有出现在 html ?不过,乍一看可以尝试使用 .clone() api.jquery.com/clone 而不是在 planWrapdetachedContent 之一处复制元素? 仍然没有概念化预期的结果。虽然html 在第一个&lt;span&gt;&lt;/span&gt; 之后似乎有&lt;/a&gt; 标签,并且在第一个html sn-p 的末尾有额外的&lt;/div&gt; 【参考方案1】:

运行这个。这使用分离,保存 jquery 数据的副本并在需要时将其添加回来。

$(document).ready(function () 

var detachedContent;
  
$("input[type='checkbox']").click(function(e) 
  
       var innerTextHTML = $(this).parent("div.selection").children('label').text();
       var planWrap = $("div.plan."+innerTextHTML).parent();

       if ($(this).is(':checked'))
           planWrap.show();
           $('div.plans-container').append(detachedContent);
       else
           detachedContent = planWrap.detach();
         
       
);
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="speeds" id="int_div_id">
          <h4>Speeds:</h4>
          <div class="checks">
            <div class="selection">
              <input type="checkbox" id="10" name="chkSpeedType" value="10" checked="checked">
              <label for="10"><span></span>10</a></label>
            </div>

            <div class="selection">
              <input type="checkbox" id="20" name="chkSpeedType" value="20" checked="checked">
              <label for="20"><span></span>20</label>
            </div>

            <div class="selection">
              <input type="checkbox" id="30" name="chkSpeedType" value="30" checked="checked">
              <label for="30"><span></span>30</label>
            </div>

          </div>
        
<div class="plans-container">

<div class="plans plansSlider" id="listings">

  <div class="bundle-hide-me" id="default"><div class="plan-wrap">
        <div class="plan 10">
          <div class="items-wrap">
            <div class="items">

            // content of the div

            </div>
          </div>
        </div>
  </div>
</div>
</div>

【讨论】:

我试过只使用显示和隐藏,我遇到的问题是每个返回的 div 应该是使用第 n 行的交替样式。当我刚刚执行planWrap.hide(); 时,它设置为style="display:none;",所以第n 行仍在计算它,我得到:style-a -- style-a -- style-b -- style-a 谢谢,这主要是可行的,只是现在将分离的内容拉入样式化的 div 时遇到了一些问题,但它比我能得到的要近得多。 我修复了我的样式问题,但你的解决方案太好了哈哈。在我的初始页面上,我将显示限制为显示 10 个速度中的 2 个,20 个中的 2 个,30 个中的 2 个。我总共有 5 10 个速度,当我分离时它隐藏了所有 5 个速度,然后当我return it 它返回所有 5 个,而不仅仅是原来的 2 个,但是,它可以工作,只是需要做更多的调整。非常感谢。

以上是关于jquery detach 重新显示 div 内容时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery/ajax 刷新/重新加载 Div 中的内容

在 .html(' ') 之后通过 jquery 在 div 中显示一个表单;

Jquery 4种移除 清空元素的方法

用 jQuery 刷新一个 div

jquery显示隐藏div

Jquery load() 不会在 div 中加载脚本标签