使用jQuery删除HTML元素之间的空格和换行符

mag*_*ger 39 javascript regex string jquery replace

使用jQuery,我想删除HTML标记之间的空格和换行符.

var widgetHTML = '    <div id="widget">        <h2>Widget</h2><p>Hi.</p>        </div>';
Run Code Online (Sandbox Code Playgroud)

应该:

alert(widgetHTML); // <div id="widget"><h2>Widget</h2><p>Hi.</p></div>
Run Code Online (Sandbox Code Playgroud)

我认为我需要的模式是:

>[\s]*<
Run Code Online (Sandbox Code Playgroud)

这可以在不使用正则表达式的情况下完成吗?

The*_*beg 60

我尝试了用户76888布局的技术,它工作得很好.为方便起见,我把它打包成一个jQuery插件,并认为社区可能会喜欢它,所以这里:

jQuery.fn.cleanWhitespace = function() {
    this.contents().filter(
        function() { return (this.nodeType == 3 && !/\S/.test(this.nodeValue)); })
        .remove();
    return this;
}
Run Code Online (Sandbox Code Playgroud)

要使用它,只需将其包含在脚本标记中,然后选择要使用jQuery清理的标记并像这样调用函数:

$('#widget').cleanWhitespace();
Run Code Online (Sandbox Code Playgroud)

  • 可能我建议在清理后添加一个`return this;`?这将允许用户链接您的功能. (4认同)

Bla*_*ago 32

递归版本:

jQuery.fn.htmlClean = function() {
    this.contents().filter(function() {
        if (this.nodeType != 3) {
            $(this).htmlClean();
            return false;
        }
        else {
            this.textContent = $.trim(this.textContent);
            return !/\S/.test(this.nodeValue);
        }
    }).remove();
    return this;
}
Run Code Online (Sandbox Code Playgroud)

  • 这比@ user76888和@the-digital-gabeg工作得更好我只是稍微修改它以"返回这个;"就像@ the-digital-gabeg修改他的那样做.这解决了我在表中的空格问题,这是一个IE9错误. (3认同)

小智 20

我想这会做到......

cleanWhitespace: function(element) {
 element = $(element);
 for (var i = 0; i < element.childNodes.length; i++) {
   var node = element.childNodes[i];
   if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
     Element.remove(node);
 }
}
Run Code Online (Sandbox Code Playgroud)