如果类不存在,则执行此操作,否则忽略

Posted

技术标签:

【中文标题】如果类不存在,则执行此操作,否则忽略【英文标题】:If class doesn't exist do this else ignore 【发布时间】:2021-06-28 11:02:08 【问题描述】:

嗨,我在 javascript 中尝试做的是查找 '.productDetails' div 中是否存在类 '.promo',如果存在,则不需要采取任何措施,但如果它不存在然后我希望它在跨度标签中打印副本。我知道这可以在 jQuery 中完成,但希望用纯 Javascript 来完成。

var elem = document.querySelector('.product-details');
if(!elem.classlist.contains('.promo'))
   document.querySelector('.title').innerhtml += "<span class="promo">Add Promo Banner</span>";
 
.product-details border: 1px black solid; margin: 10px 0
<div class="product-details">
  <div class="title">Title</div>
  <div class="promo">Promo 20% off</div>
</div>

<div class="product-details">
  <div class="title">Title</div>
</div>

【问题讨论】:

作为documentation for .classlist shows,您必须将实际的类名而不是类选择器传递给.contains() 首先是classList。其次,您的字符串有未转义的引号。第三,不要永远使用.innerHTML +=——改用insertAdjacentHTML。第四,您正在测试.product-details 元素本身是否具有.promo 类;要测试元素是否包含 .promo 子元素,请使用 .querySelector('.promo') 【参考方案1】:

首先,JS中的大小写问题(classlist!= classList),应该是驼峰式大小写classList。另外,htmlString ("&lt;span class="promo"&gt;Add Promo Banner&lt;/span&gt;") 的格式不正确。

您可以通过querySelectorAll() 获取元素来检查长度

var elem = document.querySelectorAll('.product-details');
elem.forEach(function(el)
  if(!el.querySelectorAll('.promo').length)
    el.querySelector('.title').innerHTML += "<span class=promo>Add Promo Banner</span>";
  
);
.product-details border: 1px black solid; margin: 10px 0
<div class="product-details">
  <div class="title">Title</div>
  <div class="promo">Promo 20% off</div>
</div>

<div class="product-details">
  <div class="title">Title</div>
</div>

【讨论】:

谢谢你,但是因为那里不存在 .promo 类,所以应该在第二个标题下添加带有“添加促销横幅”副本的 span 标签。 @leek1234,在这种情况下,您必须遍历所有项目并检查每个项目的条件。我已经更新了答案。请检查:) 对不起最后一个问题,如果我想查找 .promo 类是否存在或 .text 类我该怎么做?这个想法是一样的,不要用副本打印跨度标签。 @leek1234,在这种情况下你可以添加另一个条件if(!el.querySelectorAll('.promo').length || !el.querySelectorAll('.text').length) 感谢@Mamun 我已经尝试过了,但它似乎不起作用。跨度标记现在都打印在两者上。【参考方案2】:

就 JS 而言,您的代码中的问题只是语法。该成员被称为

&lt;HTML element&gt;.classList

您只是缺少大写的 L。

elem.classList 不会返回".classNameA .classNameB",而是返回类属性的实际字符串值,像这样:"classNameA classNameB"

但是,如果您进行这些更改,我仍然不相信您的代码会正常运行,因为您正在为一个元素搜索一个它不继承自的类。从"promo" 继承的元素是您引用的元素的子元素。

您在特定代码中查找的元素位于可迭代的 elem.children 数组中。

您是否尝试搜索页面上所有元素的所有子元素以查找包含"promo".classList 的继承人?如果是这样,您应该检查树遍历算法!更明显的实现是,您将从某个根目录开始并通过深度优先或广度优先搜索向下导航。 DOM 实际上只是一棵巨大的元素树。

【讨论】:

以上是关于如果类不存在,则执行此操作,否则忽略的主要内容,如果未能解决你的问题,请参考以下文章

mysql:如果不存在则插入记录,否则返回记录的ID

Selenium WebDriver Java - 如何执行“如果存在,则单击,否则跳过”?

如果该文件存在,则动态导入 React 组件,否则显示默认消息

在 2 个分隔线之间操作多行(如果不存在则附加,否则替换)

JavaScript 如果 var 存在

MSSQL 插入数据时候,如果存在则更新的方法分享