[英]Turn jQuery into vanilla JS - Insert p element after h1
关于如何将这个jQuery转换为香草JS的任何想法:
$('.section > h1').after('<p>This paragraph was inserted with jQuery</p>');
我是jQuery的新手,甚至是香草JS的新手。
据我所知:
var newP = document.createElement('p');
var pTxt = document.createTextNode('This paragraph was inserted with JavaScript');
var header = document.getElementsByTagName('h1');
不知道从这里去哪里?
jQuery在幕后为您做了很多事情。 等效的普通DOM代码可能如下所示:
// Get all header elements
var header = document.getElementsByTagName('h1'),
parent,
newP,
text;
// Loop through the elements
for (var i=0, m = header.length; i < m; i++) {
parent = header[i].parentNode;
// Check for "section" in the parent's classname
if (/(?:^|\s)section(?:\s|$)/i.test(parent.className)) {
newP = document.createElement("p");
text = document.createTextNode('This paragraph was inserted with JavaScript');
newP.appendChild(text);
// Insert the new P element after the header element in its parent node
parent.insertBefore(newP, header[i].nextSibling);
}
}
请注意,您也可以使用textContent / innerText代替创建文本节点。 尝试学习如何直接操作DOM而不是仅让jQuery完成所有工作,这是很好的。 很高兴理解这些东西,只记得jQuery和其他框架在那里可以为您减轻这些负担:)
您可能会发现此功能很有用(我没有测试)
function insertAfter(node, referenceNode) {
referenceNode.parentNode.insertBefore(node, referenceNode.nextSibling);
}
哦,还不错...
var h1s = document.getElementsByTagName('h1');
for (var i=0, l=h1s.length; i<l; i++) {
var h1 = h1s[i], parent = h1.parentNode;
if (parent.className.match(/\bsection\b/i)) {
var p = document.createElement('p');
p.innerHTML = 'This paragraph was inserted with JavaScript';
parent.insertBefore(p, h1.nextSibling);
}
}
https://developer.mozilla.org/zh-CN/docs/Web/API/Element/insertAdjacentHTML
document.querySelectorAll('.section > h1').forEach((headline) => {
headline.insertAdjacentHTML('afterend', '<p>This paragraph was inserted with jQuery</p>');
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.