Reputation: 4292
i have a web page containing some links .
<div class="accordion-list">
<ul class="accordion">
<li class="accordion-item">
<a href="#" class="accordion-link">Heading 1</a>
<ul class="sub-list">
<li><a href="xyz.com">Registrations</a></li>
<li><a href="xyz.com" >Contacts</a></li>
<li><a href="xyz.com" >Mortgages</a></li>
</ul>
</li>
<li class="accordion-item">
<a href="#" class="accordion-link">Heading 2</a>
<ul class="sub-list">
<li><a href="abc.com">Registrations</a></li>
<li><a href="abc.com" >Contacts</a></li>
<li><a href="abc.com" >Mortgages</a></li>
</ul>
</li>
</ul>
</div>
desired output
<div class="accordion-list">
<ul class="accordion">
<li class="accordion-item">
<a href="#" class="accordion-link">Heading 1</a>
<ul class="sub-list">
<li><a href="xyz.com#item1">Registrations</a></li>
<li><a href="xyz.com#item2" >Contacts</a></li>
<li><a href="xyz.com#item3" >Mortgages</a></li>
</ul>
</li>
<li class="accordion-item">
<a href="#" class="accordion-link">Heading 2</a>
<ul class="sub-list">
<li><a href="abc.com#item1">Registrations</a></li>
<li><a href="abc.com#item2" >Contacts</a></li>
<li><a href="abc.com#item3" >Mortgages</a></li>
</ul>
</li>
</ul>
</div>
i tried
$(".sub-list a").each(function() {
var _href = $(this).attr("href");
$(this).attr("href", _href + ???);
});
Can someone tell me how can we get the desired output.
Upvotes: 1
Views: 107
Reputation: 2952
please try this.
$(".sub-list").each(function(index, element){
$(element).find('li a').each(function(i, element){
var href_val = $(this).attr('href');
$(this).attr('href', href_val+"#item"+i);
});
});
Upvotes: 1
Reputation: 123397
Example on codepen: http://codepen.io/anon/pen/zlkLt/
$(".sub-list").each(function() {
var links = $(this).find('a');
links.each(function(i) {
var _href = $(this).attr('href');
$(this).attr("href", _href + "#item" + (i + 1));
});
});
(You can see the updated href via js console)
Upvotes: 3
Reputation: 25527
use
$(".sub-list").find("a").each(function(){
$(this).attr("href",$(this).attr("href")+"item"+($(this).parent().index()+1));
});
Upvotes: 1
Reputation: 36769
jQuery.each also passes the index to your callback method.
$(".sub-list a").each(function(i) {
var _href = $(this).attr("href");
$(this).attr("href", _href + '#item' + (i+1) ); // i starts from 0
});
This will update all href with
<li><a href="xyz.com#item1">Registrations</a></li>
<li><a href="xyz.com#item2" >Contacts</a></li>
<li><a href="xyz.com#item3" >Mortgages</a></li>
<li><a href="abc.com#item4">Registrations</a></li>
<li><a href="abc.com#item5" >Contacts</a></li>
<li><a href="abc.com#item6" >Mortgages</a></li>
But this is not what you expected. You will have to use the selector which will give all href in first then in second. Try that.
Upvotes: 1
Reputation: 15609
Try this:
var num = 0;
$(".sub-list a").each(function() {
var _href = $(this).attr("href");
$(this).attr("href", _href + "#item"+ ++num);
if (num == 3){
num = 0;
}
});
This basically creates a variable outside the each
, then for every link, it goes up by 1
digit. When it gets to 3
, it resets and goes back to 0
.
Upvotes: 1