JavaScript如何找到包含字符串的最接近的类

kev*_*ham 2 html javascript jquery class closest

单击按钮时,我试图找到包含字符串的最接近的类。HTML 看起来像:

<div class="feature I am the best">
  <div class="some style"> 
    <div class="new style">
      <button class="clickme">Click me </button>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我的 JavaScript 是

$('.clickme').on('mouseup', function(event) {
  var description = $(this).closest('div[class*=:contains(feature)]').attr('class');
  console.log("Description "+description);
});
Run Code Online (Sandbox Code Playgroud)

我在控制台中得到的只是:

Description undefined
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 5

假设它确实是您想要的子字符串检查(而不是类选择器),您不需要该位contains(...),这意味着*=

$('.clickme').on('mouseup', function(event) {
  var description = $(this).closest('div[class*=feature]').attr('class');
  // Change here -------------------------------^^^^^^^
  console.log("Description "+description);
});
Run Code Online (Sandbox Code Playgroud)
<div class="feature I am the best">
  <div class="some style"> 
    <div class="new style">
      <button class="clickme">Click me </button>
    </div>
  </div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

如果字符串可能包含引号或其他不符合CSS 标识符定义的字符(或者如果您只是想谨慎一些),请在值两边加上引号:.closest('div[class*="feature I am"]')


不过,在您的示例中,feature是一个类,因此您需要使用类选择器 ( .closest("div.feature"))。