2013-03-21 109 views
6

我正在尋找一種方式來包裝,用jQuery,元素轉換爲註釋,如:jQuery的註釋/取消註釋<! - 元素 - >

<!-- 
<div class="my_element"></div> 
--> 

,也是一個辦法刪除評論。

這可能嗎?因爲我找不到任何相關的東西。

+4

這將會是知道你的使用情況是什麼有用。我想不到在很多情況下這是正確的做法,而不是隱藏元素,或者從DOM中刪除它,並在稍後添加它。 – SamStephens 2013-03-21 16:59:15

+0

我從來沒有見過這樣的東西:)考慮隱藏它,結果是一樣的。從屏幕隱藏,但在源代碼中可見,結果相同。 – gpasci 2013-03-21 17:02:26

+0

我無法隱藏它,因爲我使用了一些類似於砌體的jquery插件,它不會隱藏它。 – George 2013-03-21 17:03:48

回答

15

要使用註釋包裹的元素,或者更具體地說,以取代具有該元素的HTML的評論節點的元素:

my_element_jq = $('.my_element'); 
comment = document.createComment(my_element_jq.get(0).outerHTML); 
my_element_jq.replaceWith(comment); 

要切換回:

$(comment).replaceWith(comment.nodeValue); 

如果你不具備參考註釋節點,那麼你需要遍歷DOM樹和檢查每個節點的nodeType。如果它的值是8,那麼它是一個評論。

例如:

<div id="foo"> 
    <div>bar</div> 
    <!-- <div>hello world!</div> --> 
    <div>bar</div> 
</div> 

的JavaScript:

// .contents() returns the children of each element in the set of matched elements, 
// including text and comment nodes. 
$("#foo").contents().each(function(index, node) { 
    if (node.nodeType == 8) { 
     // node is a comment 
     $(node).replaceWith(node.nodeValue); 
    } 
}); 
+0

這完全有效!非常感謝! – LittleTreeX 2013-08-07 10:03:23

-2

包裝?

function wrap(jQueryElement){ 
    jQueryElement.before("<!--").after("-->"); 
} 

不知道你會發現一旦包裝的評論有多成功。使用正則表達式對正文元素進行文本搜索是一種選擇。

或者這 - is it possible to remove an html comment from dom using jquery

+3

這不起作用:http://jsfiddle.net/zjjBE /它將第一個視爲開放和關閉,第二個視爲一個字符串。 – 2013-03-21 17:12:49

+0

夠公平的。無論如何,Stoopid問題;) – LiverpoolsNumber9 2013-03-22 12:12:15

2

你可以做評論的元素了以下工作:

function comment(element){ 
    element.wrap(function() { 
     return '<!--' + this.outerHTML + '"-->'; 
    }); 
} 

DEMO: http://jsfiddle.net/dirtyd77/THBpD/27/

+0

謝謝,但它是不可能取消註釋它,對吧? – George 2013-03-21 18:22:50

+1

還在研究它,我會讓你知道:) – Dom 2013-03-21 18:25:37

+1

this.outerHTML應該就夠了,不需要$() – 2013-03-22 15:08:08