[英]Wrap plain text in paragraph Jquery
我有一個 h2 和一些文本:
<h2>Test</h2>
Lorem ipsum dolor hener ait
我需要將文本“lorem ipsum dolor hener ait”包裝在<p>
元素中。 希望得到這樣的結果:
<h2>Test</h2>
<p>Lorem ipsum dolor hener ait</p>
目前,我有這個:
$('h2').each(function() {
$(this).next().wrapAll('p');
});
但它不起作用。 我該如何解決這個問題?
您可以獲取父級的所有文本節點並用 ap 元素包裝它們。 我不知道這個解決方案是否適用於您的 html 結構。
contents()
將返回所有節點,包括文本節點。 我使用的filter()
確保只有包含字符的文本節點被包裝。 代碼對齊的空白也是文本節點。
$('h2').each(function() { var textnodes = $(this).parent().contents().filter(function() { return this.nodeType === Node.TEXT_NODE && this.nodeValue.trim() !== ''; }).wrapAll('<p>'); });
p { background-color: red; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div> <h2>Test</h2> Lorem ipsum dolor hener ait </div>
您可以在沒有 jQuery 的情況下實現這一點。
文本是HTML 節點,因此您可以使用nextSibling訪問它們。
for (let h2 of document.querySelectorAll("h2")) {
let text = h2.nextSibling;
let p = document.createElement("p");
h2.parentNode.insertBefore(p, text);
p.appendChild(text);
}
如果它沒有按預期工作,問題是h2.nextSibling
沒有返回文本節點,而是在元素和當前文本之間可能有另一個“不可見”文本節點。 只需使用 F12 檢查您的 HTML 並進行調試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.