正如我在回答时所指出的那样,您的部分问题在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 浏览器都可以处理以下问题),您可以将 text 变量设置为它所属的 HTML 元素的“数据”属性(强烈推荐在今天的市场),从而使您的 JS 更短。
HTML
<!-- 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>
JS
$(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")); });