2013-07-24 44 views
0

代码如何从父节点删除特定标签?

<div class="something> 
    <input type="text onchange="some_function(this)"> 
    <span>Blqh blqh</span> 
    <span>Blq blq</span> 
</div> 

一旦有输入的变化我想some_function(this)删除所有<span>标签。所以在功能到目前为止,我有:

function some_function(x_this) { 
    var parent=x_this.parentNode; 
} 

我如何得到所有的<span>元素并删除它们?

非常感谢

回答

2
function some_function(x_this) { 
    var parent=x_this.parentNode, 
     spans = parent.getElementsByTagName('span'); 

    for (var i = 0; i < spans.length; i++){ 
     parent.removeChild(spans[i]); 
    } 
} 
+1

'removeChild'不接受一个字符串,我不知道为什么这是upvoted。 – Ian

+0

@Ian同意你,这根本不起作用 –

+0

@Ian,哦,谢谢,修正。 – maximkou

0
$('#parent').find('span').remove(); 

或用纯JS

var childrenspan = document.getElementById('id').getElementsByTagName('span'); 

for(var i=0;i<childrenspan.length;i++) 
{ 
    childrenspan[i].parentNode.removeChild(childrenspan[i]); 
} 
+1

OP将得到'$是undefined'错误 – bugwheels94

2

用下面HTML,例如

<div id="foo"> 
    <input /> 
    <span>Blqh blqh</span> 
    <span>Blq blq</span> 
    <br /> 
</div> 

你可以运行这个的JavaScript

var parent = document.getElementById('foo'), i = parent.childNodes.length; 
while (i--) 
    if (parent.childNodes[i].tagName === 'SPAN') 
     parent.removeChild(parent.childNodes[i]); 
+0

还不如使用'children'而不是'childNodes',否则你在循环不必要的节点(可能) – Ian

+0

@Ian'children'会在非HTML文档上工作吗?就我所知,**循环**应适用于任何文档类型。 –

+0

我想它不会在HTML文档之外工作,但我没有意识到我们正在努力支持。如果OP在讨论非HTML,那么这可能是相关的。不管怎样,为什么你使用'tagName'呢?您的代码在XML文档中不起作用,因为'tagName'保留了大小写,所以它将是“span”,而不是“SPAN”。 'nodeName'应该总是用于获取“标签名称”,它更一致 – Ian

0

如果您正在使用jQuery的然后 ID添加到您的Div标签,然后

<div id="mydiv"> 
    <input /> 
    <span>Blqh blqh</span> 
    <span>Blq blq</span> 
    <br /> 
</div> 

使用此jQuery代码:

$('#mydiv').find('span').remove() 
+0

我通过_OP's_标签建议的环境中尝试这样做了'未捕获的ReferenceError:$没有defined' –

+0

@PaulS:编辑答案。 –