使用串联和Jquery选择器使代码动态/更轻
我一直在寻找使我拥有的这个非常明确的代码块更具动态性的方法。代码和更多解释如下: HTML优先:使用串联和Jquery选择器使代码动态/更轻,jquery,html,dynamic,custom-data-attribute,Jquery,Html,Dynamic,Custom Data Attribute,我一直在寻找使我拥有的这个非常明确的代码块更具动态性的方法。代码和更多解释如下: HTML优先: <nav> <ul> <li><span id="home-btn">Home</span></li> <li><span id="work-btn">Work</span></li>
<nav>
<ul>
<li><span id="home-btn">Home</span></li>
<li><span id="work-btn">Work</span></li>
<li><span id="contact-btn">Contact</span></li>
</ul>
</nav>
正如您所看到的,我的代码是非常冗余的,我想让它更具动态性。我最初尝试连接选择器,但我仍然是JS新手,无法找到一个有效的解决方案。我的下一次尝试尝试使用.data
HTML属性和JQuery方法,但我也无法让它工作。我使用了不同的.addClass
、removeClass
和hasClass
方法将.active
和隐藏的类添加到元素。onClick
。这个解决方案最接近我,但没有发挥我想要的作用
我最大的挑战是:如何关联侦听单击事件的“按钮”,以知道要显示或隐藏哪个div(这就是我使用data属性的原因)。。。其他一些我已经研究过但没有尝试过的解决方案(只是因为我不知道如何为我的代码定制它们)是.split
,。每个,以及使用这个
提前感谢!:) HTML:
<nav>
<ul>
<li><span data-target="home" id="home-btn">Home</span></li>
<li><span data-target="work" id="work-btn">Work</span></li>
<li><span data-target="contact" id="contact-btn">Contact</span></li>
</ul>
</nav>
$('nav ul li span').click(function(){
var load = $(this).data('target');
$('.page').hide();
$('#'+load).show();
});
您还可以使用
而不是
,使用属性href='javascript:void(0)'代码>
HTML:
<nav>
<ul>
<li><span data-target="home" id="home-btn">Home</span></li>
<li><span data-target="work" id="work-btn">Work</span></li>
<li><span data-target="contact" id="contact-btn">Contact</span></li>
</ul>
</nav>
$('nav ul li span').click(function(){
var load = $(this).data('target');
$('.page').hide();
$('#'+load).show();
});
您还可以使用
而不是
,使用属性href='javascript:void(0)'代码>
HTML:
<nav>
<ul>
<li><span data-target="home" id="home-btn">Home</span></li>
<li><span data-target="work" id="work-btn">Work</span></li>
<li><span data-target="contact" id="contact-btn">Contact</span></li>
</ul>
</nav>
$('nav ul li span').click(function(){
var load = $(this).data('target');
$('.page').hide();
$('#'+load).show();
});
您还可以使用
而不是
,使用属性href='javascript:void(0)'代码>
HTML:
<nav>
<ul>
<li><span data-target="home" id="home-btn">Home</span></li>
<li><span data-target="work" id="work-btn">Work</span></li>
<li><span data-target="contact" id="contact-btn">Contact</span></li>
</ul>
</nav>
$('nav ul li span').click(function(){
var load = $(this).data('target');
$('.page').hide();
$('#'+load).show();
});
您还可以使用
而不是
,使用属性href='javascript:void(0)'代码>
首先,我会对您的html进行如下更改:
<nav class="main-nav">
<ul>
<li><span data-content="#home">Home</span></li>
<li><span data-content="#work">Work</span></li>
<li><span data-content="#contact">Contact</span></li>
</ul>
</nav>
ID属性应该是唯一的,因此没有理由需要执行div\ID
,只需执行\ID
现在来看动态部分:
$('.main-nav').find('span').on('click', function()
{
$('.page').hide(); //hide all the content
$( $(this).attr('data-content') ).show(); //grab the reference we set up in data-cotnent and show that element.
}
)};
首先,我会对您的html进行如下更改:
<nav class="main-nav">
<ul>
<li><span data-content="#home">Home</span></li>
<li><span data-content="#work">Work</span></li>
<li><span data-content="#contact">Contact</span></li>
</ul>
</nav>
ID属性应该是唯一的,因此没有理由需要执行div\ID
,只需执行\ID
现在来看动态部分:
$('.main-nav').find('span').on('click', function()
{
$('.page').hide(); //hide all the content
$( $(this).attr('data-content') ).show(); //grab the reference we set up in data-cotnent and show that element.
}
)};
首先,我会对您的html进行如下更改:
<nav class="main-nav">
<ul>
<li><span data-content="#home">Home</span></li>
<li><span data-content="#work">Work</span></li>
<li><span data-content="#contact">Contact</span></li>
</ul>
</nav>
ID属性应该是唯一的,因此没有理由需要执行div\ID
,只需执行\ID
现在来看动态部分:
$('.main-nav').find('span').on('click', function()
{
$('.page').hide(); //hide all the content
$( $(this).attr('data-content') ).show(); //grab the reference we set up in data-cotnent and show that element.
}
)};
首先,我会对您的html进行如下更改:
<nav class="main-nav">
<ul>
<li><span data-content="#home">Home</span></li>
<li><span data-content="#work">Work</span></li>
<li><span data-content="#contact">Contact</span></li>
</ul>
</nav>
ID属性应该是唯一的,因此没有理由需要执行div\ID
,只需执行\ID
现在来看动态部分:
$('.main-nav').find('span').on('click', function()
{
$('.page').hide(); //hide all the content
$( $(this).attr('data-content') ).show(); //grab the reference we set up in data-cotnent and show that element.
}
)};
使用标记中的data-*属性:
HTML:
<nav>
<ul>
<li><span data-target="home" id="home-btn">Home</span></li>
<li><span data-target="work" id="work-btn">Work</span></li>
<li><span data-target="contact" id="contact-btn">Contact</span></li>
</ul>
</nav>
$('nav ul li span').click(function(){
var load = $(this).data('target');
$('.page').hide();
$('#'+load).show();
});
data-*适用于所有主要浏览器,包括旧版本的IE。使用标记中的data-*属性:
HTML:
<nav>
<ul>
<li><span data-target="home" id="home-btn">Home</span></li>
<li><span data-target="work" id="work-btn">Work</span></li>
<li><span data-target="contact" id="contact-btn">Contact</span></li>
</ul>
</nav>
$('nav ul li span').click(function(){
var load = $(this).data('target');
$('.page').hide();
$('#'+load).show();
});
data-*适用于所有主要浏览器,包括旧版本的IE。使用标记中的data-*属性:
HTML:
<nav>
<ul>
<li><span data-target="home" id="home-btn">Home</span></li>
<li><span data-target="work" id="work-btn">Work</span></li>
<li><span data-target="contact" id="contact-btn">Contact</span></li>
</ul>
</nav>
$('nav ul li span').click(function(){
var load = $(this).data('target');
$('.page').hide();
$('#'+load).show();
});
data-*适用于所有主要浏览器,包括旧版本的IE。使用标记中的data-*属性:
HTML:
<nav>
<ul>
<li><span data-target="home" id="home-btn">Home</span></li>
<li><span data-target="work" id="work-btn">Work</span></li>
<li><span data-target="contact" id="contact-btn">Contact</span></li>
</ul>
</nav>
$('nav ul li span').click(function(){
var load = $(this).data('target');
$('.page').hide();
$('#'+load).show();
});
数据-*适用于所有主要浏览器,包括IE的旧版本。是否有任何理由使用$('.main nav')。查找('span')
<代码>$('.main nav span')
也能正确完成任务:)是的,两种方法都有效。但是我认为.find()
更快(可以忽略不计)?是的,但如果在浏览器的更高版本中查看,选择器会更快,因此我必须说:)我是否也需要将相同的“数据内容”添加到浏览器中?我添加了,我将通过删除它们进行测试。不管怎样,这都奏效了,非常感谢!是否有任何理由使用$('.main nav').find('span')
<代码>$('.main nav span')
也能正确完成任务:)是的,两种方法都有效。但是我认为.find()
更快(可以忽略不计)?是的,但如果在浏览器的更高版本中查看,选择器会更快,因此我必须说:)我是否也需要将相同的“数据内容”添加到浏览器中?我添加了,我将通过删除它们进行测试。不管怎样,这都奏效了,非常感谢!是否有任何理由使用$('.main nav').find('span')
<代码>$('.main nav span')
也能正确完成任务:)是的,两种方法都有效。但是我认为.find()
更快(可以忽略不计)?是的,但如果在浏览器的更高版本中查看,选择器会更快,因此我必须说:)我是否也需要将相同的“数据内容”添加到浏览器中?我添加了,我将通过删除它们进行测试。不管怎样,这都奏效了,非常感谢!是否有任何理由使用$('.main nav').find('span')
<代码>$('.main nav span')
也能正确完成任务:)是的,两种方法都有效。但是我认为.find()
更快(可以忽略不计)?是的,但如果在浏览器的更高版本中查看,选择器会更快,因此我必须说:)我是否也需要将相同的“数据内容”添加到浏览器中?我添加了,我将通过删除它们进行测试。不管怎样,这都奏效了,非常感谢!