使用jQuery选择子文本

时间:2010-03-07 01:06:11

标签: javascript jquery select

我有如下结构:

<form>
    <input type="text" />
    <input type="text" />
    ...
    <input type="radio" />
    <input type="whatever" />
    Here I have some text
</form>

我无法更改HTML的结构。我需要通过Javascript删除表单中的文本,问题是选择它,因为它没有包装在任何标记内。

我的解决方案(实际上更多是一个hack)使用jQuery是以下

$('form').contents().filter(function(){
    return (this.toString() == '[object Text]')
}).remove();

但它不是很强大。特别是它在IE(所有版本)上失败,其中应用于一大块文本的this.toString()返回文本本身。我当然可以试试

$('form').contents().filter(function(){
    return (this.toString() != '[object]')
}).remove();

但我正在寻找更好的解决方案。

  

我该如何删除文字?

使用jQuery或普通Javascript的解决方案对我都有好处。

4 个答案:

答案 0 :(得分:2)

试试这个,而不只是“this.toString()”:

return (Object.prototype.toString.call(this) == '[object Text]');

您还可以检查节点类型,但我永远不会记得如何做到这一点;我会去查找但有人会打败我: - )

编辑告诉你!

答案 1 :(得分:2)

您过滤了this.nodeType == Node.TEXT_NODE。看看this answer

答案 2 :(得分:2)

如果您使用1.4版,则可以

var $temp= $('form').children().detach();
$('form').empty().append($temp);

它将删除所有子元素,清空表单(文本..)并重新插入元素..

1.3.x中的相同内容需要额外的步骤..

var $temp= $('<div />');
$('form').children().appendTo($temp);
$('form').empty().append($temp.children());
关于Andrea的评论

[更新]

quoting jquery contents()

  

.contents()和.children()   方法是相似的,除了   前者包括文本节点以及   生成的jQuery中的HTML元素   对象

答案 3 :(得分:0)

怎么样:

$('form').contents().filter(function(){
    return !this.outerHTML;
}).remove();