删除除 img 标签之外的所有标签

发布于 2024-12-03 18:57:35 字数 561 浏览 0 评论 0原文

我需要正则表达式或其他内容来删除 contentEditable div 中的所有标记,但保留具有特定 class< 的 img 标记/code> 或 id,我该怎么做?

现在我使用:

.replace(/(<\/?.*?>)/gi, '');

但它会删除所有标签。

我做了这个:

var element = document.getElementById("myDiv").children;
   for(var i=0; i<element .length;i++)
   {
     if(element[i].tagName != "IMG" || element[i].className != "requiredClassName")
     {
       element[i].parentNode.removeChild(element[i]);
     }
   }

I need an regular expression or something else to remove all tags in a contentEditable div, but to keep img tag with specific class or id, how I can do this?

Now I use:

.replace(/(<\/?.*?>)/gi, '');

but it removes all tags.

I made this :

var element = document.getElementById("myDiv").children;
   for(var i=0; i<element .length;i++)
   {
     if(element[i].tagName != "IMG" || element[i].className != "requiredClassName")
     {
       element[i].parentNode.removeChild(element[i]);
     }
   }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

静赏你的温柔 2024-12-10 18:57:35
var child=document.getElementById('editableDIV').firstChild;
while(child) {
  var removeNode=null;
  if(child.tagName&&(child.tagName.toUpperCase()!=='IMG'||
     child.id!=='myid'||
     child.className!=='myclass')) removeNode=child;
  child=child.nextSibling;
  if(removeNode)removeNode.parentNode.removeChild(removeNode);
}
var child=document.getElementById('editableDIV').firstChild;
while(child) {
  var removeNode=null;
  if(child.tagName&&(child.tagName.toUpperCase()!=='IMG'||
     child.id!=='myid'||
     child.className!=='myclass')) removeNode=child;
  child=child.nextSibling;
  if(removeNode)removeNode.parentNode.removeChild(removeNode);
}
夜访吸血鬼 2024-12-10 18:57:35

(如果您需要纯 JS ):也许更好的方法是收集所有元素,然后检查它们的类/id 并执行操作。好主意是使用 DOM,而不是正则表达式。 DOM 用于 HTML 元素操作。

(或使用 jQuery ):简单的代码就可以做到这一点。只需收集所有 div 的子级并在 .each() 循环中检查它们的类即可;

例如:

$('#contentEditable').each( function( index ) {
    if( !this.is( 'img' ) && ( this.is('.someclass') || this.is('#someid') ) ) {
        this.remove();
    }
});

希望对您有帮助。

附:
使用贪婪量化时要小心 .*

它将获取任何 <; 之间的所有文本。 >,因此,如果您有下面列出的代码,则 regexp (<\/?.*?>) 将收集整个代码。

<div class="container">
    <div id="header">
        <div id="portalLink">
            <a class="genu" href="http://stackexchange.com">Stack Exchange</a>
        </div>
    </div>
</div>

( if you need plain JS ): Maybe the better way is to collect all elements then after check their class/id and perform action. Good idea is to use DOM, not regexp. DOM is for HTML elements manipulation.

( or use jQuery ): Simple code can do that thing. Just collect all div's children and check their class in .each() loop;

For e.g.:

$('#contentEditable').each( function( index ) {
    if( !this.is( 'img' ) && ( this.is('.someclass') || this.is('#someid') ) ) {
        this.remove();
    }
});

Hope it helps you.

P.S.:
Be careful when you are using greedy quantification .*

It will get all text between any < >, so if you have code listed below regexp (<\/?.*?>) will collect whole code.

<div class="container">
    <div id="header">
        <div id="portalLink">
            <a class="genu" href="http://stackexchange.com">Stack Exchange</a>
        </div>
    </div>
</div>
冰之心 2024-12-10 18:57:35
var editableDiv = document.getElementById("MyEditableDiv")
var editableDivImgs = editableDiv.getElementsByTagName("img")
for (var i = 0; i < editableDivImgs.length; i++) {
    if(editableDivImgs[i].className != "safe")
    {
        editableDivImgs[i].parentNode.removeChild(editableDivImgs[i])
    }
}

你尝试过类似的事情吗?

var editableDiv = document.getElementById("MyEditableDiv")
var editableDivImgs = editableDiv.getElementsByTagName("img")
for (var i = 0; i < editableDivImgs.length; i++) {
    if(editableDivImgs[i].className != "safe")
    {
        editableDivImgs[i].parentNode.removeChild(editableDivImgs[i])
    }
}

have you tried something like that?

金兰素衣 2024-12-10 18:57:35

不是删除所有其他元素,而是提取所有 imgs 并将它们连接成一个新字符串:

var regex = /<img.*?>/gmi;
var imgsOnly = '';
var img;
while( ( img = regex.exec(str) ) !== null ) {
    imgsOnly += img;
}
alert( imgsOnly );

Instead of removing all other elements extract all imgs and concatenate them into a new string:

var regex = /<img.*?>/gmi;
var imgsOnly = '';
var img;
while( ( img = regex.exec(str) ) !== null ) {
    imgsOnly += img;
}
alert( imgsOnly );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文