2013-06-05 90 views
0

我有一个父div,里面有两个子div。只隐藏父div文本

如何隐藏保持“child1文本”和“child2文本”可见的父div(父文本)的文本。

<div id="parent"> 
    parent text 
    <div id="child1">child1 text</div> 
    <div id="child2">child2 text</div> 
</div> 
+3

你尝试过什么吗? – rlemon

+4

您必须将“父文本”封装在元素中并隐藏该元素。 –

+0

http://mattgemmell.com/2008/12/08/what-have-you-tried/ – Ted

回答

1

只能隐藏实际元素,和隐藏要素也隐藏了所有的元素孩子,所以你必须包裹textnodes在自己的元素,然后隐藏这些元素:

$('#parent').contents().filter(function() { 
    return this.nodeType==3; 
}).wrap('<span class="text"></span>'); 

$('.text').hide(); 

FIDDLE

+0

谢谢你们所有的解决我的问题。你有什么使用nodeType == 3 。它的功能是什么 – Rameez

+0

nodeType == 3意味着Textnodes – Rinku

0

尝试以下

$('#parent').contents().filter(function(){ 
    return this.nodeType === 3; 
})​.remove();​ 

DEMO

+0

谢谢你所有的解决我的问题 – Rameez

+1

也许你应该提到,你不能简单地“显示“文字了,因为你删除了它。 –

+0

@FelixKling你是对的。感谢您注意 –

0

如果您坚持直接的HTML/JavaScript,您可以将“父文本”封装在<span>中。即,

<div id="parent"> 
    <span id="parent-text-id">parent text</span>  
    <div id="child1"> 
     child1 text 
    </div>  
    <div id="child2"> 
     child2 text 
    </div>  
</div> 

这样,您可以参考该文本,只要你想隐藏它。祝你好运!

+0

@Rameez,我没有名气给别人的答案添加评论,所以我只是把评论放在我自己的答案上。本着社区的精神,你应该标记你接受的答案。 – David

1

尝试

var x = $('#parent').contents().filter(function(){ 
    return this.nodeType == 3 
}).wrap('<span/>').parent().hide() 

演示:Fiddle

+0

谢谢你们所有的人解决了我的问题 – Rameez

0

只是作为一个备选答案,其他人将返回并藏匿#parent所有文本节点,这样只会隐藏第一childNode

$(document.getElementById('parent').childNodes[0]).wrap('<span/>').parent().hide();