Rumah > Soal Jawab > teks badan
Saya rasa ini mudah, tetapi saya bergelut dengan perkara berikut:
String (HTML diluluskan sebagai teks):
text<br>text<br><ul><li>text</li></ul><br>
Sekarang saya perlu menukar setiap satu text<br>
替换为 <div>text</div>
Melainkan teks ada di dalam <li>/<ul>
.
.replace(/(.*?)<br>/g, '<div></div>')
Ini berfungsi dengan baik, tetapi bagaimana cara saya menghalang <ul><li>text</li></ul><br>
daripada diganti?
P粉4884647312024-04-02 10:29:52
(Versi yang lebih ringkas boleh didapati dalam coretan kod di bawah)
function replaceTextBrWithDiv(html) { // Create an element that acts as a parser const parser = document.createElement('div'); parser.innerHTML = html; // Modify an array-like when iterating over it may cause some issues. // Copy it first. const childNodes = [...parser.childNodes]; // Index-based iterating for (let index = 0; index < childNodes.length; index++) { const node = childNodes[index]; const nextNode = childNodes[index + 1]; if (node instanceof Text && nextNode instanceof HTMLBRElement) { const div = document.createElement('div'); // Remove text node from parser and append it to div div.appendChild(node); nextNode.replaceWith(div); // Skip next node (i.e.
) index++; } } return parser.innerHTML; }
Cubalah:
console.config({ maximize: true }); function replaceTextBrWithDiv(html) { const parser = document.createElement('div'); parser.innerHTML = html; parser.childNodes.forEach((node, index, nodes) => { const nextNode = nodes[index + 1]; if (node instanceof Text && nextNode instanceof HTMLBRElement) { const div = document.createElement('div'); div.appendChild(node); nextNode.replaceWith(div); } }); return parser.innerHTML; } const content = 'text
text
sssccc
P粉3365367062024-04-02 09:47:45
Ini adalah percubaan saya sebelum menggunakan penyelesaian regex (lebih pendek):
const dFrag = document.createDocumentFragment(); str.textContent.split('
').forEach(substr => { const div = document.createElement('div'); let ul; if (!substr) { substr = '
'; } div.innerHTML = substr; ul = div.querySelector('ul'); if (ul) { dFrag.appendChild(ul); } else { dFrag.appendChild(div); } }); str.innerHTML = ''; str.appendChild(dFrag);