jQuery 将临时 DOM 操作为 HTML 字符串
jQuery to manipulate temporary DOM as HTML string
我在跟进这里的解决方案jQuery - Insert text inside element of a HTML string
这与我的问题非常相似,但我无法使其工作。
问题定义:
我从一些外部代码中得到一些 HTML,我将其存储到一个变量中。 HTML如下:
<div class="A2_B3" id="A2_B3">
<div class="symptom">Symptom 1</div>
</div>
<div class="A2_B1" id="A2_B1">
<div class="symptom">Symptom 2</div>
</div>
我将这个 HTML 存储到名为“tmp_dom_html”的变量中。
我的工作:
(1) 检查 class="A2_B3" 是否有下一个 div class="connected"。如果找到,则在其中添加 myHtml。
(2) 如果 class="A2_B3" 没有下一个 div with class="connected", 附加一个 div class 将 myHtml 称为“连接”。
var myHtml = '<p>Bla Bla Bla</p>';
最后 HTML 应该是这样的:
<div class="A2_B3" id="A2_B3">
<div class="symptom">Symptom 1</div>
</div>
<div class="connected"><p>Bla Bla Bla</p></div>
<div class="A2_B1" id="A2_B1">
<div class="symptom">Symptom 2</div>
</div>
这是我的代码,似乎没有任何效果。谁能帮我解决这个问题。
<script type="text/javascript">
var tmp_dom_html = '<div class="A2_B3" id="A2_B3"><div class="symptom">Symptom 1</div></div><div class="A2_B1" id="A2_B1"><div class="symptom">Symptom 2</div></div>';
var new_dom_html = $(tmp_dom_html);
var myHtml = '<p>Bla Bla Bla</p>';
//If the div with class="connected" is found, like this <div class='connected'></div> but without anything isnide it
new_dom_html.find(".A2_B3").next(".connected").append(myHtml);
if(!new_dom_html.find(".A2_B3").next().hasClass(".connected")){
new_dom_html.find(".A2_B3").after("<div class='connected'>"+myHtml+"</div>");
}
alert($(new_dom_html).html());
使用 DOMParser
.
const data = new DOMParser().parseFromString(`<div class="A2_B3" id="A2_B3"><div class="symptom">Symptom 1</div></div><div class="A2_B1" id="A2_B1"><div class="symptom">Symptom 2</div></div>`, "text/html");
const selected = $(data.body);
$('.A2_B3', selected).each(function(){
if(!$(this).next().hasClass('connected')){
$(this).after('<div class="connected"><p>Bla Bla Bla</p></div>');
}
})
console.log(selected[0].innerHTML);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
我在跟进这里的解决方案jQuery - Insert text inside element of a HTML string 这与我的问题非常相似,但我无法使其工作。
问题定义:
我从一些外部代码中得到一些 HTML,我将其存储到一个变量中。 HTML如下:
<div class="A2_B3" id="A2_B3">
<div class="symptom">Symptom 1</div>
</div>
<div class="A2_B1" id="A2_B1">
<div class="symptom">Symptom 2</div>
</div>
我将这个 HTML 存储到名为“tmp_dom_html”的变量中。
我的工作:
(1) 检查 class="A2_B3" 是否有下一个 div class="connected"。如果找到,则在其中添加 myHtml。
(2) 如果 class="A2_B3" 没有下一个 div with class="connected", 附加一个 div class 将 myHtml 称为“连接”。
var myHtml = '<p>Bla Bla Bla</p>';
最后 HTML 应该是这样的:
<div class="A2_B3" id="A2_B3">
<div class="symptom">Symptom 1</div>
</div>
<div class="connected"><p>Bla Bla Bla</p></div>
<div class="A2_B1" id="A2_B1">
<div class="symptom">Symptom 2</div>
</div>
这是我的代码,似乎没有任何效果。谁能帮我解决这个问题。
<script type="text/javascript">
var tmp_dom_html = '<div class="A2_B3" id="A2_B3"><div class="symptom">Symptom 1</div></div><div class="A2_B1" id="A2_B1"><div class="symptom">Symptom 2</div></div>';
var new_dom_html = $(tmp_dom_html);
var myHtml = '<p>Bla Bla Bla</p>';
//If the div with class="connected" is found, like this <div class='connected'></div> but without anything isnide it
new_dom_html.find(".A2_B3").next(".connected").append(myHtml);
if(!new_dom_html.find(".A2_B3").next().hasClass(".connected")){
new_dom_html.find(".A2_B3").after("<div class='connected'>"+myHtml+"</div>");
}
alert($(new_dom_html).html());
使用 DOMParser
.
const data = new DOMParser().parseFromString(`<div class="A2_B3" id="A2_B3"><div class="symptom">Symptom 1</div></div><div class="A2_B1" id="A2_B1"><div class="symptom">Symptom 2</div></div>`, "text/html");
const selected = $(data.body);
$('.A2_B3', selected).each(function(){
if(!$(this).next().hasClass('connected')){
$(this).after('<div class="connected"><p>Bla Bla Bla</p></div>');
}
})
console.log(selected[0].innerHTML);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>