我有如下结构:
<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的解决方案对我都有好处。
答案 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的评论[更新]
.contents()和.children() 方法是相似的,除了 前者包括文本节点以及 生成的jQuery中的HTML元素 对象
答案 3 :(得分:0)
怎么样:
$('form').contents().filter(function(){
return !this.outerHTML;
}).remove();