2013-10-05 21 views
1

我有HTML塊級標籤;我有搜索結果,包含在標籤匹配的句子,如下所示:jquery或php包裝塊內,但排除跨度

<p> 
Some text. More text. <span class=match>Sentence with match.</span> More text. 
</p> 

我的目標是隱藏(不刪除)不匹配的文本。我認爲最好的做法是將不匹配的文本和css樣式包裝起來:

<p> 
<span class=nomatch>Some text. More text. </span><span class=match>Sentence with match.</span><span class=nomatch> More text.</span> 
</p> 

逆向換行的種類。但我該怎麼做?我可以使用jquery或php,但它必須是DOM安全的,段落可能是任何塊元素。

因此,像(這是由):

$('.match').wrapOutside() 

編輯: 我覺得人是正確的,我需要做的「NOMATCH」在同一個代碼標記我用標記的比賽。

+0

我想看看你已經添加了的代碼。這將幫助我確定如何最好地處理不匹配的文本。 – echosa

+0

我使用PHP將塊拆分成句子(使用正則表達式),然後檢查每個句子的匹配。 「span」是一個獨特的內聯標籤,因此我不必擔心嵌套標籤不正確。 –

+0

1.)您的「顯示代碼」的定義與我的不同。我明白你在做什麼/試圖做什麼,但我希望實際上看到代碼最適合代碼庫和所需解決方案的代碼更改/添加。但是,如果您無法顯示代碼(出於法律上的原因,NDA等),那很好,但您應該說明。 2.)在處理HTML時,您應該*始終*擔心嵌套標記不正確(通常情況下)。當放鬆警惕時,HTML的非嚴格性通常會引起問題。 – echosa

回答

0

要隱藏它,你可以給無匹配類CSS屬性顯示:無。當你懸停或者點擊某處以查看更多的上下文時,你可以使用一些javascript來使其淡入。

+0

我需要添加不匹配跨度的方法。因此,給定第一塊代碼,我該如何使用jquery或php創建第二塊代碼? –

+0

將一個其他的符號添加到您的配對代碼: ex。 if(match){surround with display span} else {hidden with hide span} – Amoliski

+0

我不認爲這是有效的:如果你讓父顯示器顯示爲:none,那麼這個孩子,這裏span class = match是不能做出來的「display:inline」 - 它也被隱藏起來。你可以通過可視性讓父母:無,然後孩子的可見性:可見,但是這會留下隱藏文本的所有空間...... –

0

這應該可以做到。將$('p')替換爲您需要的任何選擇器。

$('p').each(function() { 
    $.each(this.childNodes, function(i, child) { 
     if (child.nodeType == 3) { // text node 
      $(child).before(
       $('<span class="nomatch"></span>').text(child.data) 
      ).remove(); 
     } 
    }); 
}); 
+0

這非常有趣,但是不是假設不在「匹配」範圍內的文本沒有HTML代碼?但是,可能會有大膽,斜體,跨度等...... –

+0

@JamieKatz如果您的文本中的標籤不是'.match',則此方法很快就會變得很難看。比賽可以在像'不匹配! 半場比賽! 12345 ...'。仍然有可能:向所有內容遞歸添加'.nomatch',然後從所有'.match'及其父項中移除'.nomatch'。但它值得嗎?我相信你應該重新思考你的問題。 –

相關問題