javascript - Jquery nth-child 仅适用于第一个和最后一个子级

标签 javascript jquery html css

我在使用第n个子选择器时遇到了一些麻烦,它适用于第一个和最后一个 child ,在第二个 child 上它变得疯狂,在第三个 child 上它根本不起作用(请参阅jsfiddle):

https://jsfiddle.net/6r7261Lq/2/

HTML:

<div id="selezioni">
<a href="#" class="costi" data-costo="0"><img src="immagini/crystal.png" alt="0">
<h2>0</h2></a>
<a href="#" class="costi" data-costo="1"><img src="immagini/crystal.png" alt="1">
<h2>1</h2></a>
<a href="#" class="costi" data-costo="2"><img src="immagini/crystal.png" alt="2">
<h2>2</h2></a>
<a href="#" class="costi" data-costo="10"><img src="immagini/crystal.png" alt="10">
<h2>10</h2></a>
<a href="#" class="costi" data-costo="3"><img src="immagini/crystal.png" alt="3">
<h2>3</h2></a>

Javascript:

$(document).ready(function(){
$('#selezioni a').on('click', function() {
c = $(this).data('costo');

    if (c === 0){
    $('#selezioni h2:first').css("color", "red");
    $('#selezioni h2:not(:first)').css("color", "black");
    }
    else if (c === 1){
        $('#selezioni h2:nth-child(2)').css("color", "red");
        $('#selezioni h2:not(:nth-child(2))').css("color", "black");
    }
    else if (c === 2){
        $('#selezioni h2:nth-child(3)').css("color", "red");
        $('#selezioni h2:not(:nth-child(3))').css("color", "black");
    }
    else if (c === 10){
        $('#selezioni h2:nth-child(4)').css("color", "red");
        $('#selezioni h2:not(:nth-child(4))').css("color", "black");
    }
    else if (c === 3){
        $('#selezioni h2:last').css("color", "red");
        $('#selezioni h2:not(:last)').css("color", "black");
  }
 });
 });

我对此很生气......

最佳答案

:first-child:last-child:nth-child 均定位元素相对于其父元素的位置。 h3 始终只是 :last-child 因为它是其父级的最后一个子级。 :first 也与 :first-child 不同。 :first 将返回某物的第一个实例。 :first-child 将定位父级中的第一个子级。

如果我理解最终目标,您希望使用 :nth-child 定位 a 元素,然后定位 h3 内部那个a

$(document).ready(function() {
  $('#selezioni a').on('click', function() {
    c = $(this).data('costo');

    if (c === 0) {
      $('#selezioni a:first h2').css("color", "red");
      $('#selezioni a:not(:first) h2').css("color", "black");
    } else if (c === 1) {
      $('#selezioni a:nth-child(2) h2').css("color", "red");
      $('#selezioni a:not(:nth-child(2)) h2').css("color", "black");
    } else if (c === 2) {
      $('#selezioni a:nth-child(3) h2').css("color", "red");
      $('#selezioni a:not(:nth-child(3)) h2').css("color", "black");
    } else if (c === 10) {
      $('#selezioni a:nth-child(4) h2').css("color", "red");
      $('#selezioni a:not(:nth-child(4)) h2').css("color", "black");
    } else if (c === 3) {
      $('#selezioni a:last h2').css("color", "red");
      $('#selezioni a:not(:last) h2').css("color", "black");
    }
  });
});
#selezioni{
	position: absolute;
	top: 10px;
}
h2 {
	position: absolute;
	top: -23px;
	padding-left: 10px;

}
.costi {
	float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="selezioni">
	<a href="#" class="costi" data-costo="0"><img src="immagini/crystal.png" alt="0">
	<h2>0</h2></a>
	<a href="#" class="costi" data-costo="1"><img src="immagini/crystal.png" alt="1">
	<h2>1</h2></a>
	<a href="#" class="costi" data-costo="2"><img src="immagini/crystal.png" alt="2">
	<h2>2</h2></a>
  <a href="#" class="costi" data-costo="10"><img src="immagini/crystal.png" alt="10">
	<h2>10</h2></a>
	<a href="#" class="costi" data-costo="3"><img src="immagini/crystal.png" alt="3">
	<h2>3</h2></a>
  </div>

我不确定最终目标到底是什么,但相同的功能可以写得更简单。切换您单击的元素上的类并使用 CSS 更改颜色 https://jsfiddle.net/6r7261Lq/5/

关于javascript - Jquery nth-child 仅适用于第一个和最后一个子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44035838/

相关文章:

javascript - 将 JavaScript 代码添加到 Angular 模板表达式中

javascript - 空数组似乎同时等于真假

javascript - 从右到左的幻灯片

javascript - 调整 HTML5 Canvas 中图像的大小

html - 如何在 HTML 中以毫米为单位给出表格宽度和高度

javascript - 导航栏中的 jQuery 文本装饰下划线

javascript - 如何使用 tr 或 td 标签正确包装表 tr 标签外的任何内容或元素?

javascript - GA//通过生成唯一输出的类跟踪 onClick 事件?

javascript - JQuery 动画后元素恢复到原始大小

javascript - 使用 onkeydown 事件在一个函数中插入 click 事件