wrap()多次复制元素 - jQuery

时间:2016-06-22 09:37:45

标签: javascript jquery html

我有一个非常基本的功能,只要浏览器窗口大于 x 像素数量,我就可以在另一个div标签内包装div标签。

但是,一旦页面调整大小一次,我就会出现一个奇怪的错误。

对于初学者,我将向您展示我目前使用的jQuery脚本,以便您更好地了解我正在使用的内容。

$(window).on("resize", function(){
    if (window.matchMedia("(min-width: 1920px)").matches) {
        $(".navbar-inner").wrap("<div id='center'></div>");
    } else {
        var content = $("#center").contents();
        $("#center").replaceWith(content);
    }
}).trigger("resize");

基本上,一旦窗口变得大于1919px,它就会强制将导航栏包裹在新的div标签内。​​

问题是当页面调整多次时,<div id='center'>元素将被多次复制。

所以,而不是 dom 中的输出是:

<div id="center">
    <div class="navbar-inner">
        <!-- e.t.c... !-->
    </div>
</div>

它将是:

<div id="center">
    <div id="center">
        <div id="center">
            <div id="center">
                <!-- this will duplicate over and over until at some point, it displays the navbar-inner div !-->
                <div class="navbar-inner">
                    <!-- e.t.c... !-->
                </div>
            </div>
        </div>
    </div>
</div>

我搜索了几乎每一个线程,链接,我能找到的答案,但我找不到能解决问题的东西。

我对JavaScript很陌生,所以非常感谢所有帮助。

干杯。

2 个答案:

答案 0 :(得分:1)

您需要通过检查元素的数量来检查内部是否已经包裹它。您也可以使用 unwrap() 取消扭曲元素。

$(window).on("resize", function() {
  if (window.matchMedia("(min-width: 1920px)").matches) {
    if (!$('#center').length)
      $(".navbar-inner").wrap("<div id='center'></div>");
  } else {
    $("#center .navbar-inner").unwrap();
  }
}).trigger("resize");   

或使用 is() 方法检查父级#center

$(window).on("resize", function() {
  if (window.matchMedia("(min-width: 1920px)").matches) {
    if (!$(".navbar-inner").parent().is("#center"))
      $(".navbar-inner").wrap("<div id='center'></div>");
  } else {
    $("#center .navbar-inner").unwrap();
  }
}).trigger("resize");

答案 1 :(得分:1)

您可以检查元素是否已经被包装并采取相应的行动:

$(window).on("resize", function(){
    if (window.matchMedia("(min-width: 1920px)").matches) {
        if( $(".navbar-inner").closest("#center").length == 0 )
        {
           $(".navbar-inner").wrap("<div id='center'></div>");
        }
    } else {
        var content = $("#center").contents();
        $("#center").replaceWith(content);
    }
}).trigger("resize");