Ungkapan biasa JavaScript untuk mengekalkan kandungan yang mengandungi perkataan tertentu dan menggantikan semua yang lain
P粉463824410
P粉463824410 2024-04-01 11:06:23
0
2
514

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粉463824410
P粉463824410

membalas semua(2)
P粉488464731

"Anda tidak boleh menghuraikan [HTML] menggunakan ungkapan biasa. [...] Adakah anda cuba menggunakan penghurai untuk [HT]ML sebaliknya? "

(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 )
      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
  • text

'; console.log(replaceTextBrWithDiv(content));
sssccc
P粉336536706

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);
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan