我想要在点击时更改文字。当我点击任何链接时代码工作,但是当我点击另一个链接时,没有任何反应。 jquery对我来说是新鲜事,这就是为什么我在努力解决这个问题。 提前谢谢
$(document).ready(function(){
$("#all-iso").click(function(){
$("#news-h3-change").replaceWith("<h3>ALLE NEWS</h3>");
});
});
$(document).ready(function(){
$("#date-iso").click(function(){
$("#news-h3-change").replaceWith("<h3>DATUM</h3>");
});
});
$(document).ready(function(){
$("#actor-iso").click(function(){
$("#news-h3-change").replaceWith("<h3>SCHAUSPIELER</h3>");
});
});
$(document).ready(function(){
$("#film-iso").click(function(){
$("#news-h3-change").replaceWith("<h3>FILM</h3>");
});
});
答案 0 :(得分:5)
var StatusBar;
$(document).ready(function(){
StatusBar = $("#news-h3-change");
$("#all-iso").click(function(){
StatusBar.html("ALLE NEWS");
});
$("#date-iso").click(function(){
StatusBar.html("DATUM");
});
$("#actor-iso").click(function(){
StatusBar.html("SCHAUSPIELER");
});
$("#film-iso").click(function(){
StatusBar.html("FILM");
});
});
答案 1 :(得分:4)
正如我在回答时所指出的,部分问题出在replaceWith
。它正在替换整个h3行,因此在第一次单击后没有任何ID。其次,你不必那么多地调用doc.ready。 “一个电话就是全力以赴”。最后,给我们举例说明如何缩短它,也就是说,我可能会这样做:
$(function() { // same as $(document).ready(function() {
$("#all-iso, #date-iso, #actor-iso, #film-iso").on("click", function(e) {
var txt = "";
switch ($(this).prop("id")) {
case "all-iso":
txt = "ALLE NEWS";
break;
case "date-iso":
txt = "DATUM";
break;
case "actor-iso":
txt = "SCHAUSPIELER";
break;
case "film-iso":
txt = "FILM";
break;
}
$("#news-h3-change").text(txt);
})
})
了解详情:
作为替代方案,您可以将文本设置为对象,然后使用“in-array”(如调用)来获取文本。像这样的东西:
var h3Txt = {
"all-iso": "ALLE NEWS",
"date-iso": "DATUM",
"actor-iso": "SCHAUSPIELER",
"film-iso": "FILM"
}
$(function() {
$("#all-iso, #date-iso, #actor-iso, #film-iso").on("click", function(e) {
$("#news-h3-change").text(h3Txt[$(this).prop("id")]);
})
})
如果您正在使用现代技术(期望用户拥有HTML5浏览器,尽管大多数HTML4浏览器将处理以下问题)您可以将文本变量设置为它所属的HTML元素的“数据”属性(在今天的市场上强烈推荐)从而使你的JS更短。
<!-- would be something like the following, make note of data properties -->
<li id="all-iso" data-text="ALLE NEWS">all-iso</li>
<li id="date-iso" data-text="DATUM">date-iso</li>
<li id="actor-iso" data-text="SCHAUSPIELER">actor-iso</li>
<li id="film-iso" data-text="FILM">film-iso</li>
$(function() {
$("#all-iso, #date-iso, #actor-iso, #film-iso").on("click", function(e) {
$("#news-h3-change").text($(this).data("text"));
})
})
通过在它们之间放置相同的类名,然后使用该类名进行选择,使此功能更加出色。类似的东西:
<li id="all-iso" data-text="ALLE NEWS" class="text-clickables">all-iso</li>
<li id="date-iso" data-text="DATUM" class="text-clickables">date-iso</li>
然后
$(".text-clickables").on("click", function(e) { $("#news-h3-change").text($(this).data("text")); });
答案 2 :(得分:2)
您正在替换元素,因此下次尝试查询ID为“news-h3-change”的元素时,它不存在。您可能会发现更换h3标签的内部文本更容易。
$(document).ready(function(){
$("#all-iso").click(function(){
$("#news-h3-change").text("ALLE NEWS");
});
/* ... */
$("#film-iso").click(function(){
$("#news-h3-change").text("FILM");
});
});
答案 3 :(得分:0)
.replaceWith()替换所有元素。当你第一次这样做时,没关系,但第二次你没有什么可以替换的。
在第一次替换之后,你没有任何id =“news-h3-change”的元素,它被替换了。
看看.html()方法。它仅替换内容。 .html() link to read
答案 4 :(得分:-1)
更改此
$("#date-iso").click(function () {...})
进入这个
$(document).on('click', '#date-iso' function() {...})
等等......
这会将事件侦听器绑定到document
实例,而不是绑定到要替换的对象。