2011-07-28 64 views
0

我有以下的HTML。如何申請格式化多個div的文本區域。

<div>this is line 1 {start-hidden}</div> 
<div>this is line 2</div> 
<div>{end-hidden} this is line 3</div> 

我希望{start-hidden}和{end-hidden}之間的文本不可見。我怎樣才能做到這一點?請注意,「開始隱藏」和「結束隱藏」可能在不同的地方。它有一些額外的標記。

我需要一些奇特的正則表達式還是使用服務器端DOM操作會更好?

謝謝。


我去(和PHP)的解決方案(對於那些有興趣):

正則表達式來提取裏面的所有文本(+ HTML)【開始隱藏}和{end隱藏} [調用這個部分$ inner]以及[$ pre]之前和[$ post]之後的所有文本。

preg_match('#^(.*?){start-hidden}(.*?){end-hidden}(.*?)$#is', $source, $matches) 

然後刪除$ inner內的新行的任何原因。也只能刪除那些結束標籤。

// attempt to remove all sources of new lines 
$inner = preg_replace('#<br([^>])*>#is', '', $inner); 
$inner = preg_replace('#<div([^>])*>(.*?)</div>#is', '', $inner); 
$inner = preg_replace('#<p([^>])*>(.*?)</p>#is', '', $inner); 

然後,我們發現每一個吃剩的標籤和前綴</span>和追加<跨度類= 「隱藏」>。

$inner = preg_replace('#(<[^>]+>)#is', '</span>${1}<span class="hidden">', $inner), 

然後前綴$內有<跨度類= 「隱藏」>並追加</SPAN>

$inner = '<span class="hidden">' . $inner . '</span>'; 

最後加入它全部重新走到一起(和再次重複,如果你可以的preg_match()) 。

$source = $pre; 
$source .= $inner; 
$source .= $post; 
+0

難道你不能僅僅用一種標記可以用div隱藏的塊的方式來生成HTML代碼嗎?你爲什麼要約束這種表示? –

回答

0

使用範圍:

<div>this is line 1 <span style="visibility:hidden;">{start-hidden}</span></div> 
<div>this is line 2</div> 
<div><span style="visibility:hidden;">{end-hidden}</span> this is line 3</div> 
+0

這不完全是我想要的。我需要隱藏2中的一切。所以「這是第二行」也應該隱藏起來。 – diolemo

+0

哦...知道了!在這種情況下,您應該嘗試生成帶有單個html元素內所有隱藏部分的html代碼 - 正如其他人在您的問題中提出的一樣 - 這是針對多種原因的最佳解決方案,或者也可以在我的代碼中添加隱藏CSS可見性樣式第二個div呢?這可能會有點難以編碼! - 我不知道你使用的是哪種技術! – gred

1

禁止{開始隱藏}和{end隱藏}已經是和標籤內,他們是誰? 符合HTML使用類似的建議(這是沒有意義的有風格的「破發」爲你的建議不股利):

<div>this is line 1</div> 
<div style="display:none;">this is line 2</div> 
<div>this is line 3</div> 

,或如建議通過GRED:

<div>this is line 1</div> 
<div style="visibility:hidden;">this is line 2</div> 
<div>this is line 3</div> 

編輯:看看display:nonevisibility:hidden之間的區別很重要:w3schools on display vs. visibility

+0

是的,開始隱藏和結束隱藏可以在任何地方,並可以有任何內部。我無法控制輸入。 – diolemo

+0

好的,就像你在另一個關於「crossover」的問題中提到的那樣,你試圖做的是無效的html。每個在另一個元素內部的html元素在它的父元素有一個結束標記之前都需要有一個結束標記。你需要更好地解釋你想要用代碼做什麼。如果你知道{start-hidden}和{end-hidden}總是在那裏,那麼你應該在div內部的部分使用span,並且隱藏第二個div。否則,您需要在服務器端代碼中涵蓋這些情況。 – JamesGuthrie

+0

我知道它是無效的HTML,因此需要另一個解決方案。我用正則表達式發佈了一個(相當討厭的)解決方案(參見問題編輯)。 – diolemo

相關問題