Reputation: 546045
<div id="myDiv">
<a>...</a>
<a>...</a>
<a>...</a>
<a>...</a>
<a>...</a>
<a>...</a>
</div>
If you wanted to select the 2nd, 3rd and 4th a
tags in the above example, how would you do that? The only thing I can think of is:
$("#myDiv a:eq(1), #myDiv a:eq(2), #myDiv a:eq(3)")
But that doesn't look to be very efficient or pretty. I guess you could also select ALL the a
s and then do run .each
over them, but that could get very inefficient if there were a lot more a
s.
Upvotes: 62
Views: 53469
Reputation: 881443
You should be able to do this by extracting a slice of the array thus. It's the line
$("div[id='myDiv'] > a").slice(1,4).css("background","yellow");
that you're interested in. It will affect the 2nd, 3rd and 4th elements.
<html>
<head>
<script type="text/javascript" src="jquery-1.2.6.pack.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("a").click(function(event){
$("div[id='myDiv'] > a").slice(1,4).css("background","yellow");
event.preventDefault();
});
});
</script>
</head>
<body>
<div id="myDiv">
<a>1</a>
<a>2</a>
<a>3</a>
<a>4</a>
<a>5</a>
<a>6</a>
</div>
<hr>
<a href="" >Click here</a>
<hr>
</body>
</html>
Upvotes: 3
Reputation: 34515
jQuery slice() function taking indexes of the first and the last needed elements selects a subset of the matched elements. Note what it doesn't include last element itself.
In your particular case you should use
$("#myDiv a").slice(1, 4)
Upvotes: 127