使用Jquery选择未标记的文本

时间:2012-01-31 00:38:53

标签: jquery jquery-selectors show-hide

我有以下HTML;

<p class="postcontent">
<img src="#">
Some Text
</p>

我希望只能隐藏文字。 到目前为止,我有这个;

  jQuery(function($) {
$(".postcontent").$('[type=text]').hide();
  });

编辑:我对html没有任何控制权,所以我需要通过Jquery添加它。

6 个答案:

答案 0 :(得分:3)

您可以将文本包装在FLY上然后隐藏它:

HTML:

<p class='postcontent'> <a href=#> dsds </a> aaa </p>

使用Javascript:

$('.postcontent').contents().filter(function() {
     return this.nodeType == 3; })
             .wrap('<label"> <label />').parent().hide();

JSFiddle


根据评论进行更新:
为什么会创建两个标签?这很简单,因为有两个文本节点......

<p class='postcontent'> (!!FirstTextNode!!)
    <a href=#> dsds </a> (!!SecondTextNode!!) aaa 
</p>    

答案 1 :(得分:1)

据我所知,您无法直接将CSS应用于文本节点。

您可能需要将要隐藏的文字换行为divspan这样的新元素。尝试像

这样的东西
<p class="postcontent">
<img src="#">
<span class="posttext">
Some text
</span>
</p>

然后

$(".postcontent .posttext").hide();

答案 2 :(得分:1)

您必须将文本包装在另一个元素中,例如spanlabel并隐藏:

HTML

<p class="postcontent">
    <img src="#">
    <label>some Text</label>
</p>

JQuery的

$(".postcontent > label").hide();    

答案 3 :(得分:1)

如果由于某种原因您无法编辑源html,则必须使用.contents来获取文本节点:

$(".postcontent").contents().each(function(){
    if(this.nodeType == 3){
        $(this).wrap("<div>").parent().hide();
    } 
});

http://jsfiddle.net/Wg6Pw/

答案 4 :(得分:0)

这将清除示例中的文本。然后,您可以存储文本并在需要时将其重新添加。这是一个分解其工作原理的jsfiddle:http://jsfiddle.net/brentmn/SXgZc/

var pc = $('.postcontent');
pc.html(pc.html().replace(pc.text().trim(), ''));

答案 5 :(得分:0)

将要隐藏的文本放在元素中,然后通过调用id隐藏。