替换身体而不是脚本?

时间:2016-06-10 06:04:57

标签: javascript jquery html

where

我希望替换正文的所有内容,但不要更改脚本标记内的脚本标记和内容。

如果我<body> <div>blabla</div> <div>blabla2</div> <script> .... </script> </body> ,它会替换整个内容,使其看起来像:

$('body').html('<span>hello</span>')

但我喜欢的是它看起来像:

<body>
  <span>hello</span>
</body>

基本上替换了身体EXCEPT脚本中的所有内容。这有可能吗?

6 个答案:

答案 0 :(得分:3)

如果您知道您的脚本是body元素中的最后一个脚本(通常是这种情况),您可以这样做:

$("body *:not(script:last)").remove();
$("body").prepend($("<div>Test!</div>"));

小提琴:https://jsfiddle.net/cq43bvam/1/

答案 1 :(得分:1)

尝试使用此代码:

$('body').html('<span>hello</span><script>'+$('body script').html()+'</script>');

答案 2 :(得分:1)

如果你在体内替换整个html,它会删除它中的每一个东西。

最好的方法是在单独的变量中定义脚本,然后替换正文,然后将该变量附加到正文中

var scriptHtml = $('body').find('script');
$('body').html('<span>hello</span>');
$('body').append(scriptHtml);

答案 3 :(得分:1)

$("body").contents().not("script").remove();
$("<div>Test!</div>").prependTo("body");

文档:contents()prependTo()

这假设脚本是身体的孩子。如果它们可以嵌套得更深,请先执行此操作:

$("body * script").appendTo("body");

答案 4 :(得分:0)

找到div并删除......

$('body').prepend('<span>hello</span>').find("div").remove();

答案 5 :(得分:0)

您可以将remove()方法与:not()选择器一起使用

&#13;
&#13;
$(document.body).find(':not(script)').remove();
// body is clear. do whatever you want.
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
  var test1;
</script>
<span>hello</span>
<script>
  var test2;
</script>
<p>how<span>are</span>
</p><span>you</span>
&#13;
&#13;
&#13;