为了账号安全,请及时绑定邮箱和手机立即绑定

检查html标签是否包含文本节点

检查html标签是否包含文本节点

浮云间 2023-12-14 14:21:02
我在 Shopify 中有一个弹出模式,出于安全考虑,我使用文本节点而不是innerHtml。但是,每次我打开弹出模式时,文本节点都会不断附加到我的 h1 标记中。有没有办法检查节点是否已经被附加?(我不想使用布尔值来检查是否已附加文本节点)html:<h1 id="ProductHeading" class="product__title product__title--template"></h1><h2 id="ProductHeadingModal" class="product__title product__title--template product__title--modal"></h2>javascript:var title = document.createTextNode(product.title);// Product heading is an element with h1 tagvar productHeading = document.getElementById("ProductHeading"); if(// how to check if element has no node?) {  productHeading.appendChild(title);}整个 JavaScript 块:window.onload = () => {  if (window.__shgProductInits.length) {    window.__shgProductInits.forEach((ele) => {      let proId = document.getElementById(ele.uuid);      proId.setAttribute('url', ele.productHandle);      proId.style.cursor='pointer';      proId.addEventListener('click', (e) => {        let productHandle = e.target.parentElement.parentElement.parentElement.getAttribute('url');        fetch('/products/'+productHandle+'.js')          .then((res) =>{return res.json()})          .then((product) => {             console.log(product)            var product = product;            document.getElementsByClassName("product-modal")[0].style.display = "block";                        var title = document.createTextNode(product.title);            var productHeading = document.getElementById("ProductHeading");            var productHeadingModal = document.getElementById("ProductHeadingModal");                        if(!(productHeading.hasChildNodes())) {                productHeading.appendChild(title);                productHeadingModal.appendChild(title);                                var price = document.createTextNode("$" + parseInt(product.price).toFixed(2));                document.getElementById("product-price").appendChild(price);            }          });      });    });  }ProductHeading 本身不是一个节点(我认为)。检查innerHtml的长度不起作用,因为它总是0
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

有几种方法:


if (element.firstChild) {

    // It has at least one

}

或hasChildNodes()函数:


if (element.hasChildNodes()) {

    // It has at least one

}

或childNodes 的length 属性:


if (element.childNodes.length > 0) { // Or just `if (element.childNodes.length)`

    // It has at least one

}

所以你可以这样写


var title = document.createTextNode(product.title);

// Product heading is an element with h1 tag

var productHeading = document.getElementById("ProductHeading"); 


if(!(productHeading.hasChildNodes())) {

  productHeading.appendChild(title);

}



查看完整回答
反对 回复 2023-12-14
?
慕的地10843

TA贡献1785条经验 获得超8个赞

if (productHeading.hasChildNodes()) {

}


查看完整回答
反对 回复 2023-12-14
  • 2 回答
  • 0 关注
  • 45 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信