$("body").wrapInner("<div class='test'></div>");发现会有两层<div class='test'></div>讲原有body间内容包裹,而如果是对普通div操作则不会出现这种问题。用的jquery 1.5.2,难道是bug?不知道有木有人遇到相同情况,怎么解决的?

解决方案 »

  1.   

    我估计是你的方法被调了两次 前面alert一下看看
      

  2.   

    我这边没问题,应该是你其他代码导致这段代码执行了两次
    <head>
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.2.min.js"></script>
    <script>
    $(function(){
    $("body").wrapInner("<div class='test'></div>");
    });</script>
    </head>
    <body>
    <div id="wrap">其他内容</div>
    </body>
      

  3.   

    解决了,我的代码本身没问题。原来是在body标签还未完全加载的情况下触发此事件,则会wrapInner两次,谢谢#3的代码
      

  4.   

    还是有问题,就算加了$(function(){});也还是运行两次问题出在于 “DOM节点内的script标记引发$.fn.ready函数执行2次” http://cmc3.cn/n/228.html
      

  5.   


    可能你理解错了,是只要wrapInner的目标容器内有脚本,就会被执行两次
    我是为了写一个jquery插件,不能限制别人body区域不能放脚本。
    测试代码如下:
    <head>
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.2.min.js"></script>
    <script>
    $(function(){$("body").wrapInner("<div class='test'></div>");});
    </script>
    </head>
    <body>
    <div id="wrap">
    其他内容  
    </div>
    <script>
    alert($);
    </script>
    </body>
      

  6.   

    wrapInner,wrap,wrapAll都涉及到此问题
      

  7.   

    这个应该是不可避免的吧,你body内部的DOM结构发生变化了,浏览器会再次加载新的DOM结构 那里面的script肯定是要再次执行的
      

  8.   

    这和jquery的版本没有关系,也不是bugwrapInner的意思就是在元素内部包裹
    包裹前:
    <body>
    <div id="wrap">
        其他内容  
    </div>
    <script>
        alert($);
    </script>
    </body>包裹后:
    <body>
    <div class='test'>
    <div id="wrap">
        其他内容  
    </div>
    <script>
        alert($);
    </script>
    </div>
    </body>执行动态添加的<script>代码是jquery挺好的功能。
    $(function(){
        $('<\script>alert("zswang 路过")<\/script>').appendTo('body');
    });
      

  9.   

    可以选择只包裹body下一级的div元素。
    $(function(){
        $("body>div").wrap("<div class='test'></div>");
    });
      

  10.   


    如果DIV内部还有脚本呢?
    何来非BUG一说?
      

  11.   

    不按照你的意愿执行就是bug?
    虽然我觉得很合理,但是不是bug你可以找jquery作者讨论一下,超出了我控制的范围。解决的方案还有一种,就是先把script都移除掉,再wrap。
     $("script").remove();
      

  12.   

    LS的,你一直说这不是BUG,然后给出种种非常规的办法,哈哈,我表示很无奈不过我现在换用其他方式解决了。我上面都说了,我在写一个jquery插件,不可避免别人在目标容器内放置脚本。remove掉script就是破坏别人页面了