gpt4 book ai didi

javascript - 如何从 DOM 中删除特定的 <script> 和 <style> 标签

转载 作者:行者123 更新时间:2023-11-29 23:23:09 26 4
gpt4 key购买 nike

我有一个向我发送 JS 和 CSS 的第三方 API 响应,我将其注入(inject)文档头部。

        Model.retrieve().then(res => {
// inject to the DOM
if(res) {
$("head").prepend( res.css ); //res.css would be a <style>
$("head").append( res.js ); // Would be a <script> ... </script>
let div = document.getElementById( 'banner-outerwrap' );
div.insertAdjacentHTML( 'beforeend', res.html );
} else {
// No response, do the cleanup.
}
})

问题:

如果响应为空,我想清理/删除(CSS 和 JS)。 (即对于不适用的用例)但我不确定如何在不刷新 DOM 的情况下使用 jQuery 来做到这一点。 (我在 directive.js 中运行这段代码,但我无法刷新 DOM,因此我需要清理)

如有任何见解,我们将不胜感激。

最佳答案

要求

据我所知,目前您正在注入(inject)一些包裹在 <script> 中的脚本根据您从 API 收到的文本响应在文档中添加标签,之后要清理/删除。

问题

问题是 <head> 中可能有多个脚本标记并且您不会跟踪注入(inject)的脚本,这将更灵活,更容易操作您的文档。

解决方案

为此,我希望您使用 DocumentFragment函数 createDocumentFragment .

诀窍在于,在注入(inject)脚本之前,您需要提供 <script>标记一些 idclass这样您就可以稍后在收到新响应时选择该标签,而不是删除所有标签。

我将继续收到 response ,假设我们有以下响应

var response='<script>alert("hello all")<\/script>';

现在我们将上面的脚本标签作为文本分配给它 class我们需要将其转换为一个节点,然后将其附加到 documentFragment并为其分配一个新属性 class然后将其附加到文档中

//create a document fragment
let htmlFragment = document.createDocumentFragment();

//create a div element to hold the response
let tempNode = document.createElement('div');

//add response to the div
tempNode.innerHTML = response;

//append the <script> tag from the div to the fragment
htmlFragment.appendChild(tempNode.firstChild);

//select script tag from the fragment now
let scriptTag = htmlFragment.querySelector('script');

//add class to the <script> tag
scriptTag.setAttribute('class', 'removeables');

//append the tag to the document body
$(document.body).append(fragment);

完成后,您现在可以通过以下方式轻松选择和删除脚本标签

$('.removeables').remove();

上面给出了一个工作示例,它在页面加载时注入(inject)脚本标记,然后在单击按钮时注入(inject)脚本标记 delete它会删除您可以打开 HTML 检查器并查看的脚本标记。

我创建了一个函数 updateTags(response)您可以将 <script> 传递给它响应并返回一个 documentfragment您可以使用 jquery 附加它或 javascript .

//method to add script 
function updateTags(response) {
let htmlFragment = document.createDocumentFragment();
let tempNode = document.createElement('div');
tempNode.innerHTML = response;
htmlFragment.appendChild(tempNode.firstChild);
let scriptTag = htmlFragment.querySelector('script');
scriptTag.setAttribute('class', 'removeables');
return htmlFragment;
}

$(document).ready(function() {
var response = '<script>alert("hello")<\/script>';
var fragment = updateTags(response);
$(document.body).append(fragment);

$("#delete").on('click', function() {
$('.removeables').remove();
});
});
<html>

<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

</head>

<body>
<div id="content">
</div>

<button id="delete">remove</button>
</body>

</html>

关于javascript - 如何从 DOM 中删除特定的 &lt;script&gt; 和 &lt;style&gt; 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49991056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com