javascript - 如何使用 jQuery 选择具有特定子元素的元素?

标签 javascript jquery

假设以下 html 片段...

HTML 示例

<div class="panel">
    <input type="hidden" class="id" value="1"></input>
    <div class="collection">
        <div>
            <input type="hidden" class="id" value="1"></input>
            <input type="text" value="hello world"></input>
        </div>
        <div>
            <input type="hidden" class="id" value="2"></input>
            <input type="text" value="goodbye moon"></input>
        </div>
    </div>
</div>
<div class="panel">
    <input type="hidden" class="id" value="2"></input>
    <div class="collection">
        <div>
            <input type="hidden" class="id" value="3"></input>
            <input type="text" value="some text"></input>
        </div>
        <div>
            <input type="hidden" class="id" value="4"></input>
            <input type="text" value="whatever"></input>
        </div>
    </div>
</div>

我如何制作一个 jQuery 选择器来选择类为“panel”的 div,其中子元素是类为“id”且值为 2 的隐藏输入?

我当前的尝试选择了子元素,而不是父元素。既然我有了 child ,我就可以调用 parent ,但我正在寻找一个选择器,让我第一次得到 parent 。

获取子项的选择器...

var element = $(".panel > input[type='hidden'][value='2'].id");

我也试过 :has 但它选择了两个面板,因为它选择了所有后代,而不仅仅是子和 div 'colection' 有一个隐藏的输入,类为 'id' 和值 2第一个面板。

这是我完整的测试示例...

完整的测试示例:

$(document).ready(function () {
  var element = $(".panel > input[type='hidden'][value='2'].id");
  var elements = $(".panel").has("input[type='hidden'][value='2'].id");
});
<html>
	<head>
		<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
	</head>
	<body>
		<div class="panel">
		    <input type="hidden" class="id" value="1"></input>
		    <div class="collection">
		        <div>
		            <input type="hidden" class="id" value="1"></input>
		            <input type="text" value="hello world"></input>
		        </div>
		        <div>
		            <input type="hidden" class="id" value="2"></input>
		            <input type="text" value="goodbye moon"></input>
		        </div>
		    </div>
		</div>
		<div class="panel">
		    <input type="hidden" class="id" value="2"></input>
		    <div class="collection">
		        <div>
		            <input type="hidden" class="id" value="3"></input>
		            <input type="text" value="some text"></input>
		        </div>
		        <div>
		            <input type="hidden" class="id" value="4"></input>
		            <input type="text" value="whatever"></input>
		        </div>
		    </div>
		</div>
	</body>
</html>

最佳答案

您可以使用 .has() 来执行您所描述的操作方法,使用 > direct child combinator ,像这样:

var elements = $(".panel").has("> input[type='hidden'][value='2'].id");

工作片段:

// no-conflict safe shorthand document ready
jQuery(function($) {
  // utilize .has with the > child combinator
  var elements = $(".panel").has("> input[type='hidden'][value='2'].id");
  elements.css({border: '2px solid red'});
});
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<div class="panel">
  <input type="hidden" class="id" value="1"></input>
  <div class="collection">
    <div>
      <input type="hidden" class="id" value="1"></input>
      <input type="text" value="hello world"></input>
    </div>
    <div>
      <input type="hidden" class="id" value="2"></input>
      <input type="text" value="goodbye moon"></input>
    </div>
  </div>
</div>
<div class="panel">
  <input type="hidden" class="id" value="2"></input>
  <div class="collection">
    <div>
      <input type="hidden" class="id" value="3"></input>
      <input type="text" value="some text"></input>
    </div>
    <div>
      <input type="hidden" class="id" value="4"></input>
      <input type="text" value="whatever"></input>
    </div>
  </div>
</div>

关于javascript - 如何使用 jQuery 选择具有特定子元素的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48329141/

相关文章:

javascript - 在 react 中获取导入函数的未定义值

javascript - 有没有更高效的方法来调用Hacker News API?

javascript - 如何在 TypeScript 中表示包含多种类型的二维数组?

javascript - Array.from 不执行深复制

javascript - 新安装的 Handlebars 在首次运行时会产生 ReferenceError

javascript - 为什么图像不占全宽百分比?

javascript - 覆盖 javascript 确认框

javascript - 如何在 UI 上动态显示图像?

jquery - 使用 Bootstrap 进行表单对齐

jquery - 当鼠标进入新对象时停止并回滚其他 jQuery 动画对象