是否可以使用JQuery删除’& nbsp’..?

Is it possible to remove '&nbsp' using JQuery..?

我在一行中有两个按钮,它们显示在两个td中,并且在ie中没有正确排列,我怀疑td中的隐藏空格(&;nbsp)可能在输入之后或输入按钮之前,不幸的是我无法访问自动生成的html代码。唯一的方法是使用jquery控制我有一个类似这样的jquery。

1
$("td:contains(' ')").css("display","none");

这是一个正确的方法来消除TD中的这一点吗?

不过,我在jquery方面的知识并不多……

谢谢!

阿基尔·保罗


不,你可以沿着这条线做一些事情:

1
2
3
$("td").html(function (i, html) {
    return html.replace(/ /g, '');
});


nbsp不是元素,因此不能隐藏它。

您可以做的是重写包含以下内容的元素…这样地:

1
 $('#container').html( $('#container').html().split('&nbsp').join('') );

另外,使用jquery.contains检测sp的位置,并设置它的父元素一个字体大小为0或display none的类也可以做到这一点。

注意,如果您选择重写HTML以删除不需要的nbsp,则之前附加的所有事件都将被删除。


如果我们采用问题标题("是否可以使用jquery删除' '………",则不回答OP的特定方案)用一般的方式回答这个问题(我认为这是有用的),那么任何使用.html()的回答都有一个根本的缺陷:用这种方式替换HTML也会删除与旧HTML相关联的任何数据和事件处理程序-不可取!它可能适用于OP的特定场景,但我认为以更一般的方式回答问题是有用的…

更好的方法是替换元素中单个文本节点的.textContent。因此,考虑到以下标记:

1
2
3
4
5
     Here is a link  
    <p>
Here is a paragraph with another link inside: &nbsp;&nbsp;another link&nbsp;&nbsp;
</p>
    And some final text &nbsp;&nbsp;&nbsp;&nbsp;

我们可以删除所有 (即unicode \u00A0—请参阅此处的更多信息),如下所示:

1
2
3
4
5
$('.container, .container *').contents().each(function() {
    if (this.nodeType === 3) { // text node
        this.textContent = this.textContent.replace(/\u00A0/g, '');
    }
});

$('.container, .container *')选择容器及其内部的所有元素,然后.contents()选择这些元素的所有子元素,包括文本节点。我们遍历这些节点中的每一个,对于我们遇到的每个文本节点(nodeType === 3,我们用一个空字符串替换 (\u00A0)。


使用此:

1
2
3
4
var td = $("td:contains('&nbsp;')");
var html = td.html();
html = html.replace("&nbsp;","");
td.html(html);


试试这个

1
$('#div').text($('#div').text().replace(/&nbsp;/g, ' '));


我一直在努力解决这个问题,最终解决方案非常明显,而不是使用.html(),而是使用.text()

例子:

1
2
var text = $(label).text();
    text.replace(/&nbsp;/gi,'');