我有一个包含很多段落的网站。其中一些有文字和图像:
<p>first paragraph</p>
<p>second paragraph</p>
<p>third paragraph</p>
<p>fourth paragraph<img alt="alt" src="src"/></p>
<p>fifth paragraph</p>
我想将带有<img>
标签的编号段落包含在新段落中:
<p id="1">first paragraph</p>
<p id="2">second paragraph</p>
<p id="3">third paragraph</p>
<p id="4">fourth paragraph</p>
<p id="5"><img alt="alt" src="src"/></p>
<p id="6">fifth paragraph</p>
请注意,如果第4段内的文字在图片之后,那么最后的情况应该是:
<p id="1">first paragraph</p>
<p id="2">second paragraph</p>
<p id="3">third paragraph</p>
<p id="4"><img alt="alt" src="src"/></p>
<p id="5">fourth paragraph</p>
<p id="6">fifth paragraph</p>
现在我只有这段代码,但它没有将图像添加到单独的段落中:
elem.find('p').each(function () {
id++;
$(this).attr('id', 'id_' + id);
});
答案 0 :(得分:3)
一种方法:
$('p').each(
function(i){
while(this.childNodes.length > 1) {
var p = document.createElement('p');
p.appendChild(this.childNodes[1]);
this.parentNode.insertBefore(p,this.nextSibling);
}
});
$('p').attr('data-index',function(i) { return i; });
我修改了第一块代码以保留childNodes的顺序(在this example using the above code中有缺陷(请查看textNode
后面的第二个img
,它是在错误的地方):
$('p').each(
function(i){
while(this.childNodes.length > 1) {
var p = document.createElement('p');
p.appendChild(this.lastChild);
this.parentNode.insertBefore(p,this.nextSibling);
}
});
答案 1 :(得分:0)
$('p').each(function(index, p) {
p.find('img').each(function() {
if (p.text() != '') {
var newParagraph = $('<p></p>');
var html = p.html();
newParagraph.append($(this));
if (html.substring(0,1) != '<') {
p.after(newParagraph);
}
else {
p.before(newParagraph);
}
}
});
});
$('p').each(function(i) {
$(this).attr('id', i);
});