[英]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.