javascript JS根据h1标记中包含的特定文本切换HTML内容

jxct1oxe  于 2022-12-21  发布在  Java
关注(0)|答案(3)|浏览(162)

我是javascript的新手,一直在寻找一个解决方案,但没有找到。
我想根据H1标签是否包含某些文本来切换某个p标签的内容。我的目标是把这个js放在每个页面的中,以备需要时使用。
我已经发现if和else if应该是一种合适的方法,但我也愿意接受其他的想法。我试着写一个switch语句,但我不知道如何让它工作。
到目前为止我找到的最接近的是...

<h1>This is about Red</h1>
<p id="colour"></p>

<script>
if('h1:contains("Red")'){
document.getElementById("colour").innerHTML = "Red description";
} else if ('h1:contains("Orange")'){
document.getElementById("colour").innerHTML = "Orange description";
} else if ('h1:contains("Green")'){
document.getElementById("colour").innerHTML = "Green description";
} else if ('h1:contains("Blue")'){
document.getElementById("colour").innerHTML = "Blue description";
}

</script>

...但是当H1标签包含其他文本时,p标签的内容不会改变,只有“红色”文本似乎可以工作。请有人告诉我哪里出错了吗?非常感谢!

byqmnocz

byqmnocz1#

虽然已经有了一个公认的答案,但我添加这个答案是为了展示一种不同的方法,我相信这种方法更容易扩展以供将来使用。

查找关键字

与公认的答案类似,使用.includes()可以确定文本中的颜色/关键字,但在进行字符串比较时,我也喜欢使用.toLowerCase()之类的东西,因为如果两个单词的大写方式不同,区分大小写可能会导致.includes()之类的东西返回false。

使用对象

if/elseswitch()语句可能很有用,但我经常倾向于在涉及几个不同选项的情况下使用对象或对象数组,对象还使以后添加和自定义变得更容易。

const h1 = document.querySelector("h1"),
      description = document.querySelector("#colour"),
      colors = [
        { color: "red", description: "Red description" },
        { color: "orange", description: "Orange description" },
        { color: "green", description: "Green description" },
        { color: "blue", description: "Blue description" }
      ]
  
description.innerText = colors.filter(f => h1.innerText.toLowerCase().includes(f.color))[0]?.description
<h1>This is about Red</h1>
<p id="colour"></p>

实际上,这是在对象数组上使用.filter()来查找color属性位于h1元素文本中的任何对象。

扩展/更新

我不知道它的计划用例是什么,但我假设如果它在文本中的任何地方找到单词"Red",您最终不会想要"Red description"。相反,您可能会有一些其他的措辞或句子,它们可以很容易地设置在这个对象中。添加其他颜色就像复制另一种颜色/线条并更改文本一样容易。

baubqpgj

baubqpgj2#

    • 更新了对您评论的答复:**

如果你想要一些高级的if语句,你可以使用类似于第一种方法的if语句:

const elH1Content = document.getElementById("h1").innerHTML;
const elColour = document.getElementById("colour");

if (elH1Content) {
  if (elH1Content.includes("Red")) {
    elColour.innerHTML = "First one (red)";
  } else if (elH1Content.includes("Orange")) {
    elColour.innerHTML = "Second one (orange)";
  } else if (elH1Content.includes("Green")) {
    elColour.innerHTML = "Third one (green)";
  } else if (elH1Content.includes("Blue")) {
    elColour.innerHTML = "Forth one (blue)";
  }
}
<h1 id="h1">This is about Blue</h1>
<p id="colour"></p>

我以前没有在JavaScript的if语句中看到过'h1:contains("Red")',你确定这是正确的吗?
您可以获取H1的innerHTML,然后检查字符串.includes是否为颜色字符串。
注意,我给了H1元素一个id ="h1"来直接访问该元素,否则您需要循环访问页面上的所有H1元素。

uoifb46i

uoifb46i3#

请为h1元素使用一个选择器,然后使用它的内容进行检查。

const h1El = document.getElementById("sel")

if(h1El.textContent.includes('Red')){
document.getElementById("colour").innerHTML = "Red description";
} else if (h1El.textContent.includes('Orange')){
document.getElementById("colour").innerHTML = "Orange description";
} else if (h1El.textContent.includes('Green')){
document.getElementById("colour").innerHTML = "Green description";
} else if (h1El.textContent.includes('Blue')){
document.getElementById("colour").innerHTML = "Blue description";
}

相关问题