- Attended a Community Meetup
- Australia
- Author had a File in an Envato Bundle
- Author had a Free File of the Month
- Author was Featured
- Bought between 100 and 499 items
- Contributed a Blog Post
- Exclusive Author
I want to target these element for my 3 collumn portfolio page and I did something like this :
jQuery('.page-template-portfolio-full-php #portfolioItem li:nth-child(3n)').css({ marginRight: '0px'});
jQuery('.page-template-portfolio-full-php #portfolioItem li:nth-child(6n)').css({ marginRight: '0px'});
jQuery('.page-template-portfolio-full-php #portfolioItem li:nth-child(9n)').css({ marginRight: '0px'});
jQuery('.page-template-portfolio-full-php #portfolioItem li:nth-child(12n)').css({ marginRight: '0px'});
I know it’s not the best way and I know I could do something like i++ or something but im not sure exactly what it is ..
I want to do the same thing for the 2 collumn .. only this time target every 2nd, 4th, 6th element etc etc ..
How is it done?
Thanks guys!
- Envato Staff
- Reviewer
- Community Moderator
- Venezuela
- Has been a member for 4-5 years
- Repeatedly Helped protect Envato Marketplaces against copyright violations
- Microlancer Beta Tester
- Sold between 10 000 and 50 000 dollars
- Exclusive Author
There you go.
jQuery('#portfolioItem li:nth-child(3n+3)').css({ marginRight: '0px' });
Hi DD
I think it’s easier with i++ you can do it this way:
$counter =0;
query_posts <--- your normal query
if ( have_posts() ) ,etc. you know the rest
++$counter;
if($counter == 3) {
$postclass = 'last';
$counter = 0;
} else { $postclass = ''; }
<li class="<?php echo $postclass; ?>">
your code.....
</li>
This will add the class last to every 3rd, 6th, 9th, etc elements. and then you just need your css.
.last{margin-right: 0 !important;}
Edit: Ivor was faster 
- United States
- Sold between 250 000 and 1 000 000 dollars
- Featured in a Magazine
- Won a Competition
- Was featured in a podcast
- Author was Featured
- Item was Featured
- Beta Tester
Love this tool: http://css-tricks.com/examples/nth-child-tester/
- Envato Staff
- Reviewer
- Community Moderator
- Venezuela
- Has been a member for 4-5 years
- Repeatedly Helped protect Envato Marketplaces against copyright violations
- Microlancer Beta Tester
- Sold between 10 000 and 50 000 dollars
- Exclusive Author
manu3l9816 said
Hi DDI think it’s easier with i++ you can do it this way:
$counter =0; query_posts <--- your normal query if ( have_posts() ) ,etc. you know the rest ++$counter; if($counter == 3) { $postclass = 'last'; $counter = 0; } else { $postclass = ''; }<li class="<?php echo $postclass; ?>"> your code..... </li>This will add the class last to every 3rd, 6th, 9th, etc elements. and then you just need your css.
.last{margin-right: 0 !important;}Edit: Ivor was faster
![]()
Mine is a single line 
- Attended a Community Meetup
- Australia
- Author had a File in an Envato Bundle
- Author had a Free File of the Month
- Author was Featured
- Bought between 100 and 499 items
- Contributed a Blog Post
- Exclusive Author
Damn, I knew it was simple 
Thanks my friend.
- Envato Staff
- Reviewer
- Community Moderator
- Venezuela
- Has been a member for 4-5 years
- Repeatedly Helped protect Envato Marketplaces against copyright violations
- Microlancer Beta Tester
- Sold between 10 000 and 50 000 dollars
- Exclusive Author
manu3l9816 said
Ivor saidMan i need to learn more about jQuery
Mine is a single line![]()
![]()
But your solution gave me an idea for a problem I’m having here haha! Thanks.
- Microlancer Beta Tester
- Envato Staff
- Author had a File in an Envato Bundle
- Lead Reviewer
- Blog Editor
- Repeatedly Helped protect Envato Marketplaces against copyright violations
- Forum Moderator
- Sold between 10 000 and 50 000 dollars
- Author was Featured
Yep, the nth child selector is the way to go. But keep in mind that this take a performance hit if the number of portfolio items is huge. [Actually huge.]
In those cases, you’re better of checking the position of an entry and assigning an appropriate class through server side code, PHP in this case, I’m assuming. Then you can merely use the class selector to manipulate specific elements in the front end, as needed.
This way, computation is offloaded to the server instead of the client having to do the job. Again, this only applies if you have a huge number of elements to parse. Otherwise, the simpler method noted above should do.
- Microlancer Beta Tester
- Author had a Free File of the Month
- Has been a member for 3-4 years
- Item was Featured
- Author was Featured
- Austria
- Exclusive Author
- Referred between 200 and 499 users
jQuery('#portfolioItem').find('li').each(function(i,e){
if(!i%3) $(e).css({ marginRight: '0px' });
});
The child selector isn’t good for large list. The id selecter is the fastest and the find method is fast too.
Far better is to assign a class which is slightly faster than the css:
jQuery('#portfolioItem').find('li').each(function(i,e){
if(!i%3) $(e).addClass('last');
});
Anyway, I recommend the latest jquery version but at least 1.4.4.
Edit: and in one line:jQuery('#portfolioItem').find('li').each(function(i,e){if(!i%3)$(e).addClass('last');});

