2013-06-24 82 views
0

我想在下面的代碼中使用父段落標記去除元標記。使用父段落標記去除元標記

<p> 
    <meta content="text/html; charset=unicode" http-equiv="Content-Type" /> 
</p> 
<p> 
    <meta content="MSHTML 8.00.6001.18702" name="GENERATOR" /> 
</p> 
<div> 
    <img border="0" src="http://localhost:15978/TestImages/Que_152_0/51099.jpg" /></div> 
<br /> 
<br /> 
<div> 
    write something on the pic shown.</div> 

我可以用

.replace(/<meta([^>]+)>/g, ''); 

正則表達式刪除meta標籤,想正則表達式與父母paragrapy標籤更換元

+2

是否必須使用「regex」? –

+0

@badZoke,不,任何使用JavaScript或jQuery代替使用父段落標記的meta –

回答

1

這可以用該短jQuery的命令很容易地完成:

$('p meta').remove(); 

查找<meta>標記,是<p>孩子們在選擇器被容易地描述,並且remove()將刪除所有匹配元素一次。

它變得更加複雜一點,當你的HTML是一個字符串,但它仍然不是太糟糕了:

var content = '...insert above html here...'; 

// insert into a div to parse as HTML 
var $content = $('<div />').html(content); 

// find all <meta> tags inside <p> and remove them 
$content.find('p meta').remove(); 

// convert contents back to a string 
content = $content.html(); 

工作小提琴:http://jsfiddle.net/WVWPS/

雖然上面的代碼工作對我來說,有可能在某些瀏覽器中出現問題是由於<meta>不是文檔正文中的有效HTML元素。 This question表明在某些情況下,jQuery可能無法正確創建像<meta>這樣的元素。

如果遇到特定瀏覽器的問題,你可以嘗試這樣的事:

var content = '...insert above html here...'; 

// convert <meta> tags to <span> tags with a "meta" class 
content = content.replace(/<meta /g, '<span class="meta" '); 

// insert into a div to parse as HTML 
var $content = $('<div />').html(content); 

// find all .meta elements inside <p> and remove them 
$content.find('p .meta').remove(); 

// convert contents back to a string 
content = $content.html(); 

工作小提琴:http://jsfiddle.net/a4Wa3/

之前我們解析HTML,我們正在做一個字符串替換到改爲將<meta>標籤轉換爲<span class="meta">標籤。

請注意,最後一個選項是一個非常脆弱的解決方案,如果更改元標記的生成方式,可能會中斷。作爲一般規則,應避免使用正則表達式或其他字符串函數操作HTML,因爲它可能有serious side effects

+0

我想從字符串中移除標記而非HTML元素 –

+0

@HaneepCR我已更新我的回答解決使用字符串的問題。 – jcsanyi

0

你可以做jQuery的下面,

$("meta").each(function() { 
    var $this = $(this); 
    if ($this.parents("p").length > 0) { 
     $this.remove(); 
    } 
}); 

Test Link

+0

我想從字符串中移除標記而非HTML元素 –