所以我有三个按钮,每个按钮在点击时都会显示自己的内容。但我想要发生的是活动链接文本更改为关于我们和href也改变。我的问题是我可以改变文本,但是当我点击另一个链接时它不会改变,我也不知道如何实现这一点。另一个问题是,一旦我点击它第一次href改变,我需要它更改时,第二次不是第一次点击它。希望所有这些都有意义。
https://codepen.io/Reece_Dev/pen/gWdEoJ
$(document).ready(function()
{
$('.link').on('click', function()
{
$('.pageContainer').addClass('hide');
$('#'+ $(this).data('target')).removeClass('hide');
if($(this).on('click')){
$(this).attr("href", "https://www.google.com");
$(this).text('about');
}
});
});

nav{
width: 100%;
text-align: center;
}
nav ul{
list-style-type: none;
}
nav ul li{
display: inline-block;
}
nav ul li a{
font-size: 40px;
margin: 0 10px;
}
p{
font-size: 30px;
font-weight: bold;
}
div{
width: 100%;
text-align: center;
}
.hide{
display: none;
}

<nav>
<ul>
<li><a id="link_one" class="link" data-target="accreditations" href="#">link 1</a></li>
<li><a id="link_two" href="#" class="link" data-target="our_prods">link 2</a></li>
<li><a id="link_three" href="#" class="link" data-target="why_us">link 3</a></li>
</ul>
</nav>
<div class="pageContainer" id="about_us">
<p>About Us Page - to be displayed by default</p>
</div>
<div class="pageContainer" id="accreditations">
<p>Accreditations Page Content - Link 1</p>
</div>
<div class="pageContainer" id="our_prods">
<p>Our products - Link 2</p>
</div>
<div class="pageContainer" id="why_us">
<p>Why us content - link 3</p>
</div>
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous"></script>
&#13;
答案 0 :(得分:2)
您可以尝试以下方法 - 我已经评论过js来展示我在做什么。只有链接的其他更改 - 使用目标ID作为href并将隐藏类添加到您不希望默认显示的页面容器
$(document).ready(function() {
var links = $('.link'),
containers = $('.pageContainer'); // cache these for better performance
links.on('click', function(e) { // pass event into function
var link = $(this);
e.preventDefault(); // add this to stop the default action of the link
containers.addClass('hide');
$(link.attr('href')).removeClass('hide'); // use the href so it is more accessible - ie link will work without js
if (link.attr('href').substr(1) === link.data('target')) { // only do this if original href
links.not(link).text(function() {
return $(this).data('text'); // reset text
}).attr('href', function() {
return '#' + $(this).data('target'); // reset href
});
link.attr("href", "#about_us").text('about'); // not sure how you want to set the text and link for this
// maybe use more data attributes so it can be different per link
} else {
// reset link if it was about that was clicked
link.text(link.data('text')).attr('href', '#' + link.data('target')); // reset href and text
}
});
});
nav {
width: 100%;
text-align: center;
}
nav ul {
list-style-type: none;
}
nav ul li {
display: inline-block;
}
nav ul li a {
font-size: 40px;
margin: 0 10px;
}
p {
font-size: 30px;
font-weight: bold;
}
div {
width: 100%;
text-align: center;
}
.hide {
display: none;
}
<nav>
<ul>
<li><a id="link_one" href="#accreditations" class="link" data-target="accreditations" data-text="link 1">link 1</a></li>
<li><a id="link_two" href="#our_prods" class="link" data-target="our_prods" data-text="link 2">link 2</a></li>
<li><a id="link_three" href="#why_us" class="link" data-target="why_us" data-text="link 3">link 3</a></li>
</ul>
</nav>
<div class="pageContainer" id="about_us">
<p>About Us Page - to be displayed by default</p>
</div>
<div class="pageContainer hide" id="accreditations">
<p>Accreditations Page Content - Link 1</p>
</div>
<div class="pageContainer hide" id="our_prods">
<p>Our products - Link 2</p>
</div>
<div class="pageContainer hide" id="why_us">
<p>Why us content - link 3</p>
</div>
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
答案 1 :(得分:0)
将prev文本保存在数据属性中的链接中。然后单击“重置所有div” 使用初始文本,然后将新文本设置为目标div
对于第二次单击时激活链接,在第一次单击时向div添加一个新类。如果该类不存在,则更改href
附带示例演示
$(document).ready(function()
{
$('.link').on('click', function() {
$('.link').each(function( ){
$(this).text($(this).data('inactive-text'));
})
$('.pageContainer').addClass('hide');
$('#'+ $(this).data('target')).removeClass('hide');
$(this).text( $(this).data('active-text') );
if($(this).hasClass("clicked")){
$(this).attr("href", "https://www.google.com");
}
$(this).addClass("clicked")
});
});
&#13;
nav{
width: 100%;
text-align: center;
}
nav ul{
list-style-type: none;
}
nav ul li{
display: inline-block;
}
nav ul li a{
font-size: 40px;
margin: 0 10px;
}
p{
font-size: 30px;
font-weight: bold;
}
div{
width: 100%;
text-align: center;
}
.hide{
display: none;
}
&#13;
<nav>
<ul>
<li><a id="link_one" class="link" data-target="accreditations" href="#" data-inactive-text="link 1" data-active-text="about" >link 1</a></li>
<li><a id="link_two" href="#" class="link" data-target="our_prods" data-inactive-text="link 2" data-active-text="about" >link 2</a></li>
<li><a id="link_three" href="#" class="link" data-target="why_us"data-inactive-text="link 3" data-active-text="about" >link 3</a></li>
</ul>
</nav>
<div class="pageContainer" id="about_us">
<p>About Us Page - to be displayed by default</p>
</div>
<div class="pageContainer" id="accreditations">
<p>Accreditations Page Content - Link 1</p>
</div>
<div class="pageContainer" id="our_prods">
<p>Our products - Link 2</p>
</div>
<div class="pageContainer" id="why_us">
<p>Why us content - link 3</p>
</div>
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous"></script>
&#13;
答案 2 :(得分:0)
您可以使用e.preventDefault()
来阻止<a/>
标记的默认行为。这样它就不会重定向到链接。
但是你说你希望它在第二次点击时重定向它,那么你需要某种计数器。一种解决方案是在元素本身上保留data-attribute
并在单击后更改它。
例如:
$(document).ready(function()
{
$('.link').on('click', function(e)
{
if($(this).attr('data-times-clicked') == '0'){
e.preventDefault();
$(this).attr('data-times-clicked', 1);
$('.pageContainer').addClass('hide');
$('#'+ $(this).data('target')).removeClass('hide');
$(this).attr("href", "https://www.google.com");
$(this).text('about');
}
});
});
&#13;
nav{
width: 100%;
text-align: center;
}
nav ul{
list-style-type: none;
}
nav ul li{
display: inline-block;
}
nav ul li a{
font-size: 40px;
margin: 0 10px;
}
p{
font-size: 30px;
font-weight: bold;
}
div{
width: 100%;
text-align: center;
}
.hide{
display: none;
}
&#13;
<nav>
<ul>
<li><a id="link_one" data-times-clicked="0" class="link" data-target="accreditations" href="#">link 1</a></li>
<li><a id="link_two" data-times-clicked="0" href="#" class="link" data-target="our_prods">link 2</a></li>
<li><a id="link_three" data-times-clicked="0" href="#" class="link" data-target="why_us">link 3</a></li>
</ul>
</nav>
<div class="pageContainer" id="about_us">
<p>About Us Page - to be displayed by default</p>
</div>
<div class="pageContainer" id="accreditations">
<p>Accreditations Page Content - Link 1</p>
</div>
<div class="pageContainer" id="our_prods">
<p>Our products - Link 2</p>
</div>
<div class="pageContainer" id="why_us">
<p>Why us content - link 3</p>
</div>
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous"></script>
&#13;
答案 3 :(得分:0)
尝试Code:Jquery Changed
$(document).ready(function()
{
$('.link').on('click', function() {
$('.link').each(function( ){
$(this).text($(this).data('inactive-text'));
})
$('.pageContainer').addClass('hide');
$('#'+ $(this).data('target')).removeClass('hide');
$(this).text( $(this).data('active-text') );
});
});
Html更改代码:
<!-- language: lang-html -->
<nav>
<ul>
<li><a id="link_one" class="link" data-target="accreditations" href="#" data-inactive-text="link 1" data-active-text="about" >link 1</a></li>
<li><a id="link_two" href="#" class="link" data-target="our_prods" data-inactive-text="link 2" data-active-text="about" >link 2</a></li>
<li><a id="link_three" href="#" class="link" data-target="why_us"data-inactive-text="link 3" data-active-text="about" >link 3</a></li>
</ul>
</nav>