2015-07-05 41 views
3

我正在开发Chrome扩展并尝试隐藏页面的一部分。我对这个东西相当陌生,所以如果我使用错误的术语,或者问题显而易见的话,我会提前道歉!使用Javascript/JQuery隐藏文本

页面格式如下图所示:

<div class="wrapper"> 
    <span class="loud" style="text-decoration: none;">...</span> 
    <div class="leave-gap">...</div> 
    <quote>...</quote> 
    "*** I can't figure how to hide this ***" 
    <p></p> 
    <span id="id_12345" class="none">...</span> 
    <div class="block-footer">...</div> 
    <div class="leave-gap">...</div> 
</div> 

随着片段所暗示的,我无法弄清楚如何隐藏星星位突出。

我有一个函数,它作为输入变量,在课堂上“包装”的第一个元素:

function processComment(commentStart) 
{ 
    $element = commentStart; 

    while($element) 
    { 
     if(some condition) 
     { 
      $element.hide(); 
     } 
     $element.next(); 
    } 

因为这段文字是由本身的任何标签外坐着,它没有被拾起。我不能隐藏整个包装类,因为它里面有一些我需要显示的位。

任何建议感激地收到。

感谢, 理查德

+1

感谢您的答复。我喜欢Pranav解决方案的优雅。 – Richard

回答

1

设置可视性propery或包装作为折叠,并设置儿童的可见性以覆盖可视性属性。它只会隐藏文本节点。

$('.wrapper').css('visibility', 'collapse').find('*').css('visibility', 'visible');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="wrapper"> 
 
    <span class="loud" style="text-decoration: none;">...</span> 
 
    <div class="leave-gap">...</div> 
 
    <quote>...</quote> 
 
    "*** I can't figure how to hide this ***" 
 
    <p></p> 
 
    <span id="id_12345" class="none">...</span> 
 
    <div class="block-footer">...</div> 
 
    <div class="leave-gap">...</div> 
 
</div>

+0

谢谢Pranav。这是一个很好的解决方案。在我的情况下,我可以写: – Richard

+1

$ element.parent().css('visibility','collapse')。find('*').css('visibility','visible'); – Richard

+0

@Richard:很高兴帮助:) –

0

你最好的选择可能是你想隐藏到它自己的跨度内容放置。

+1

感谢Tozer,我无法控制内容的格式,但是如果我这样做,你的建议就会起作用。 – Richard

0

如果我也明白了,你的if (some condition)是关于自身的文本内容,所以这是一个正则表达式的东西或喜欢的东西。

所以你可以做的是,找到涉及的文本部分,把它包装在<span>标签之间:那么你可以用通常的方式来解决这个<span>元素。

它可能看起来像这样(这里假设你的荟萃例如意味着$element s为连续的字):

function processComment(comment) { 
    // (comment is supposed to be the HTML element to process) 
    var words = $(comment).html().split(' '); 
    for (var i in words) { 
     var word = words|i]; 
     if(some condition on word) { 
      words[i] = '<span class="hidden-word">' + word + '</span>'; 
     } 
    } 
    $(comment).html(words.join(' ')); 
}