简体   繁体   English

Javascript字符串替换所有范围

[英]Javascript string replace all span

I have an HTML string and I want to replace all span that contain replace text class 我有一个HTML字符串,我想替换所有包含替换文本类的跨度

var html = '<span class="replace_text" id="58d4aa82c887136a08dbedf5" contenteditable="false">mcq</span>Hello<span class="replace_text" id="58d4aa82c887136a08dbedf4" contenteditable="false">mcq</span>Other string charatcter';

Expected Output is: 预期输出为:

{{58d4aa82c887136a08dbedf5}}Hello{{58d4aa82c887136a08dbedf4}}Other string charatcter

Means: 手段:

{{span_id}}middle string{{span_id}}

From what I understand, you want to give the span element the innerText of it's id attribute. 据我了解,您想为span元素提供id属性的innerText

Here you go : 干得好 :

 var html = '<span class="replace_text" id="58d4aa82c887136a08dbedf5" contenteditable="false">mcq</span> Hello <span class="replace_text" id="58d4aa82c887136a08dbedf4" contenteditable="false">mcq</span> Other string charatcter'; $('#container').html(html); $('.replace_text').each(function() { // We iterate over all such elements $(this).text('{{' + $(this).attr('id') + '}}'); // We get vaue in the id attribute and add it to the span }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id='container'></div> 

As you've tagged the answer with jQuery, I've given my solution using the same 正如您使用jQuery标记答案一样,我使用相同的解决方案

You can create an element, set .innerHTML to html , use .find() $.map() to iterate span elements, return span .id and .nextSibling .textContent , call .join() with parameter "" on resulting array to create string from array. 您可以创建一个元素,将.innerHTML设置为html ,使用.find() $.map()迭代span元素,返回span .id.nextSibling .textContent ,在结果数组上使用参数""调用.join()从数组创建字符串。

 var html = '<span class="replace_text" id="58d4aa82c887136a08dbedf5" contenteditable="false">mcq</span>Hello<span class="replace_text" id="58d4aa82c887136a08dbedf4" contenteditable="false">mcq</span>Other string charatcter'; var res = $.map($("<div>", {html:html}).find("span"), function(el) { return "{{" + el.id + "}}" + el.nextSibling.textContent }).join(""); $("body").append(res); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

I would recommend creating a dummy element and using the DOM api. 我建议创建一个虚拟元素并使用DOM API。 Any regexp solution to parse/modify HTML strings is trash. 任何用于解析/修改HTML字符串的正则表达式解决方案都是垃圾。

 const prepareHtml = html => { var fragment = document.createElement('div') fragment.innerHTML = html for (let span of fragment.querySelectorAll('span.replace_text')) span.innerHTML = `{{${span.id}}}` return fragment.innerText } var html = '<span class="replace_text" id="58d4aa82c887136a08dbedf5" contenteditable="false">mcq</span>Hello<span class="replace_text" id="58d4aa82c887136a08dbedf4" contenteditable="false">mcq</span>Other string charatcter' console.log(prepareHtml(html)) // {{58d4aa82c887136a08dbedf5}}Hello{{58d4aa82c887136a08dbedf4}}Other string charatcter 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM