如何切换文本切换?

时间:2018-04-03 19:38:27

标签: javascript html

我正在尝试创建一个用于切换<p>元素中文本的按钮。这是HTML代码:

<button onclick="toggle()">Switch</button> <p id="unit">metric</p>

这是javaScript:

function toggle() {
      if(document.getElementById("unit").text()=="metric"){
          document.getElementById("unit").innerHTML="imperial";}

      else if(document.getElementById("unit").value=="imperial"){
          document.getElementById("unit").value="metric";}
      }
};

我做错了什么?

4 个答案:

答案 0 :(得分:3)

除非您正在处理.textContent.innerHTML元素,否则请始终使用inputtextarea

&#13;
&#13;
function toggle() {
  const unit = document.getElementById("unit")
  if (unit.textContent === "metric") {
    unit.textContent = "imperial";
  } else if (unit.textContent === "imperial") {
    unit.textContent = "metric";
  }
}
&#13;
<button onclick="toggle()">Switch</button>
<p id="unit">metric</p>
&#13;
&#13;
&#13;

当您故意使用或插入HTML标记(可能存在安全性和编码问题)时,仅使用innerHTML。在设置或检索文本值时,请改用textContent

答案 1 :(得分:1)

您可以将innerHTML的结果用于检查和分配。

虽然您只有两个值,但只需要一次检查。

function toggle() {
    if (document.getElementById("unit").innerHTML === "metric") {
        document.getElementById("unit").innerHTML = "imperial";
    } else  {
        document.getElementById("unit").innerHTML = "metric";
    }
}
<button onclick="toggle()">Switch</button>
<p id="unit">metric</p>

更好的版本会为实际值采用变量并切换此值。

function toggle() {
    unit = { metric: 'imperial', imperial: 'metric' }[unit];
    document.getElementById("unit").innerHTML = unit;
}

var unit = 'metric';
<button onclick="toggle()">Switch</button>
<p id="unit">metric</p>

答案 2 :(得分:0)

else if您要设置value#unit的{​​{1}}设置innerHTML

所以:textContent应为document.getElementById("unit").value="metric";

  • 编辑(将@TeeperPerformance评论中提到的innerText更改为textContent)

答案 3 :(得分:0)

如果您在两个选项之间来回交换,则可以使用此模式,从而最大限度地减少检查部分。它没有考虑文本上的任何外部更改,但如果你想要做的只是交换这两个值,它将很好地工作。

&&查找第一个falsy值,这就是为什么this.toggled仅在属性为undefined(ae第一次运行函数时)时设置为true的原因,之后只需将其值更改为当前的值(false=>truetrue=>false),并根据更新后的值显示文本。

function toggle() { 
  var p = document.getElementById("unit");

  this.toggled == undefined && (this.toggled = true)
  this.toggled = !this.toggled;
  
  p.textContent = (this.toggled) ? "metric" : "imperial";
};
<button onclick="toggle()">Switch</button>
<p id="unit">metric</p>