如何使这个js更简单?

时间:2016-12-15 01:53:43

标签: javascript jquery html

我有代码在网站上显示这样的页面

 //PAGE ABOUT
 $('nav ul.nav-menu li a#about-content').on("click", function() {
     $('section.content').not('content-about').removeClass('active')
     $('section.content.content-about').addClass('active');        
 });

 //PAGE PORTFOLIO
 $('nav ul.nav-menu li a#portfolio-content').on("click", function() {
     $('section.content').not('content-portfolio').removeClass('active')
     $('section.content.content-portfolio').addClass('active');        
 });

 //PAGE BLOG
 $('nav ul.nav-menu li a#blog-content').on("click", function() {
     $('section.content').not('content-blog').removeClass('active')
     $('section.content.content-blog').addClass('active');        
 });

 //PAGE CONTACT
 $('nav ul.nav-menu li a#contact-content').on("click", function() {
     $('section.content').not('content-contact').removeClass('active')
     $('section.content.content-contact').addClass('active');        
 });

你能帮我把这段代码变得更简单吗?

2 个答案:

答案 0 :(得分:0)

实际上它很简单。我认为你真正做的最好的事情就是编写一个函数:

function handleClick(className) {
  $('section.content').not(className).removeClass('active');
  $('section.content.' + className).addClass('active');
}

您也可以将.on('click', cb)更改为.click(cb),并且如上所述@jaromanda X,您可以直接选择ID,因为ID必须是unqiue。

// PAGE ABOUT
$('#about-content').click(handleClick('content-about');

//PAGE PORTFOLIO
$('#portfolio-content').click(handleClick('content-portfolio'));

//PAGE BLOG
$('#blog-content').click(handleClick('content-blog'));

//PAGE CONTACT
$('#contact-content').click(handleClick('content-contact'));

答案 1 :(得分:0)

这很简单

首先,从每个选择器中删除所有nav ul.nav-menu li a,因为ID是唯一的

$('#about-content,#portfolio-content,#blog-content,#contact-content').on("click", function() {
    var base = this.id.split('-')[0];
    $('section.content').not('content-' + base ).removeClass('active');
    $('section.content.content-' + base).addClass('active');
});
  

注意:如果您的ID不是唯一的,jQuery似乎至少在某种程度上处理了这一点 - 但我建议您根本没有重复ID:p