无法使用id定位特定元素的父级

时间:2018-06-05 19:35:51

标签: javascript jquery

我正在研究这个演示代码。为什么我无法使用id定位特定元素的父元素?我想将a类添加到id元素的父级,其中#map$("#map .nav-tabs>li>a").parent().addClass('active'); $("#map .nav-tabs li>a").parent().addClass('active');

.active {
  border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="nav-tabs">
  <li><a id="map"> Map</a></li>
  <li><a id="tap"> Tap</a></li>
  <li><a id="app"> App</a></li>
</ul>
view = (View) inflater.inflate(R.layout.your_layout_file, container, false);

2 个答案:

答案 0 :(得分:2)

您可以使用.closest()代替 .parent(),以获得更具面向未来的灵活性

$(".nav-tabs>li>a").closest("#map, #app").addClass('active');
.active {
  border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="nav-tabs">
  <li><a id="map"> Map</a></li>
  <li><a id="tap"> Tap</a></li>
  <li><a id="app"> App</a></li>
</ul>

但由于ID是唯一的,因此您可以直接定位您的ID

$("#map, #app").addClass('active');
.active {
  border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="nav-tabs">
  <li><a id="map"> Map</a></li>
  <li><a id="tap"> Tap</a></li>
  <li><a id="app"> App</a></li>
</ul>

这让我觉得你实际上是在问一个XY问题 - 你的实际需要是在点击或类似的情况下定位父母:

$(".nav-tabs").on("click", ".nav-tabs-tab", function() {
  $(this).addClass("active");
  // or 
  // $(this).closest("li").addClass("active");
  // or
  // $(this).closest("desiredSelector").addClass("active");
  // you got the point
});
.active {
  border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul class="nav-tabs">
  <li><a class="nav-tabs-tab">Map</a></li>
  <li><a class="nav-tabs-tab">Tap</a></li>
  <li><a class="nav-tabs-tab">App</a></li>
</ul>

答案 1 :(得分:0)

你的选择器存在缺陷。您的选择器将匹配此html中的锚点:

<div id="map">
  <ul class="nav-tabs">
    <li><a>foo</a>
  </ul>
</div>

只需将ID放在选择器中:

$(".nav-tabs>li>a").parent().addClass('active');

如果您想定位特定的锚点,请执行以下操作:

$("#map").parent().addClass('active');