我需要一个函数,该函数可在某些(对于本示例而言为div)元素内查找文本(子文本节点),并将文本包装在段落中。
<body>
<div>Text1
<div>Text2</div>
</div>
<div>Text3</div>
<p>Text4</p>
</body>
const elements = fn(document);
console.log(document.body.innerHTML);
<body>
<div><p>Text1</p>
<div><p>Text2</p></div>
</div>
<div><p>Text3</p></div>
<p>Text4</p>
</body>
尝试过这样做,但是却无法正常工作
const fn = (document) => {
let elements = document.getElementsByTagName('div');
elements = Array.prototype.slice.call(elements);
elements.forEach(el => (el.innerHTML) ? el.innerHTML = `<p>${el.innerHTML}</p>` : '');
}
任何人都可以帮助修复它吗?
另一个例子:
文档:
Text1
<div>
<div>Text2</div>
<p>Text3</p>
</div>
<div>Text4</div>
预期:
Text1
<div>
<div><p>Text2</p></div>
<p>Text3</p>
</div>
<div><p>Text4</p></div>
通过我的功能收到:
Text1
<div><p></p>
<div>Text2</div>
<p>Text3</p>
<p></p>
</div>
<div><p>Text4</p></div>
通过考虑childElementCount
的div
,我们可以获得您想要的结果。如下所示重写您的函数。
const fn = (document) => {
let elements = document.getElementsByTagName('div');
elements = Array.prototype.slice.call(elements);
elements.forEach(el => {
if (el.innerHTML && el.childElementCount === 0) {
el.innerHTML = `<p>${el.innerHTML}</p>`;
}
});
}
var elements = document.getElementsByTagName('div');
for(var i=0;i<elements.length;i++){
if(elements[i]===0){
console.log(elements[i].textContent);
}
else{
var y=elements[i].innerHTML
console.log(y)
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>testing result</title>
</head>
<body>
<div>Text1</div>
<div>
<div>Text2</div>
<p>Text3</p>
</div>
<div>Text4</div>
</body>
</body>
</html>
我尝试了这个,但是我无法在控制台<div>text4</div>
和<div>text2</div>
中获得像输出这样的最后两个div(4和2),我希望这对我有所帮助,但我不知道如何打印最后两个div innerHTML