2017-03-03 129 views
0

我有这个JavaScript函数; 我从一个按钮发送一个数字,并一切顺利,直到它有一个问题的索引方法。Javascript indexOf并替换 - 我错过了什么

CODE:

<script lang="ja" type="text/javascript"> 


    function YellowChair(NumId) 
    { 
     if (document.getElementById("CheckBox" + NumId).checked) 
     { 
      document.getElementById("ChairImg" + NumId).src = "Images/YellowChair.png"; 
      TypeTheNum(NumId, true); 
     } 
     else 
     { 
      document.getElementById("ChairImg" + NumId).src = "Images/BlueChair.png"; 
      TypeTheNum(NumId, false); 
     } 

    } 
    function TypeTheNum(NumId,Add) 
    { 
     var Label = document.getElementById("SelectedSitsLabel"); 
     var Hidden = document.getElementById("SelectedSitsHidden"); 


     if (Label.innerHTML == "") 
     { 
      Label.textContent += NumId; 
      Hidden.textContent += NumId; 
     } 
     else 
     { 
      if (Add) 
      { 
       Label.textContent += "," + NumId; 
      } 
      else 
      { 
     // getting stuck here. 
       if (Label.indexOf((NumId + ",").toString()) != -1) 
       { 
        alert("1"); 
        Label.replace((NumId + ",").toString(), ""); 
       } 
       else 
       { 
        alert("ELSE"); 
        Label.replace(("," + NumId).toString(), ""); 
       } 
      } 
     } 
     Hidden.textContent = Label.textContent; 
    } 


</script> 

我想也许它是因为我用的textContent插入文本, 也,即时通讯相当肯定的财产以后是错误的replace

非常感谢!

回答

1

HTMLElement没有一个方法indexOf。 String拥有method.remeber重置textContent如果textContent更改。

function YellowChair(NumId) 
 
    { 
 
     if (document.getElementById("CheckBox" + NumId).checked) 
 
     { 
 
      document.getElementById("ChairImg" + NumId).src = "Images/YellowChair.png"; 
 
      TypeTheNum(NumId, true); 
 
     } 
 
     else 
 
     { 
 
      document.getElementById("ChairImg" + NumId).src = "Images/BlueChair.png"; 
 
      TypeTheNum(NumId, false); 
 
     } 
 

 
    } 
 
    function TypeTheNum(NumId,Add) 
 
    { 
 
     var Label = document.getElementById("SelectedSitsLabel"); 
 
     var Hidden = document.getElementById("SelectedSitsHidden"); 
 

 

 
     if (Label.innerHTML == "") 
 
     { 
 
      Label.textContent += NumId; 
 
      Hidden.textContent += NumId; 
 
     } 
 
     else 
 
     { 
 
      if (Add) 
 
      { 
 
       Label.textContent += "," + NumId; 
 
      } 
 
      else 
 
      { 
 
     // getting stuck here. 
 
       if (Label.textContent.indexOf((NumId + ",").toString()) != -1) 
 
       { 
 
        alert("1"); 
 
        Label.textContent=Label.textContent.replace((NumId + ",").toString(), ""); 
 
       } 
 
       else 
 
       { 
 
        alert("ELSE"); 
 
        Label.textContent=Label.textContent.replace(("," + NumId).toString(), ""); 
 
       } 
 
      } 
 
     } 
 
     Hidden.textContent = Label.textContent; 
 
    }
<button onclick="TypeTheNum('foo')">Remove `foo`</button> 
 
<div id="SelectedSitsLabel">foo,bar,baz</div> 
 
<div id="SelectedSitsHidden"></div>

+0

好,但为什么更换dowsnt工作? –

+0

Simlarly'indexOf','HTMLElement'没有方法'replace',但'String'有。 –

1

功能:

var element = document.getElementById(id); 

返回一个元素对象,或者为null但不是一个字符串。

也许你想改变你的代码,使用textContent财产,这似乎是您正在使用的像一个:

if (Label.textContent.indexOf((NumId + ",").toString()) != -1){ 
    alert("1"); 
    Label.textContent.replace((NumId + ",").toString(), ""); 
} 
else{ 
    alert("ELSE"); 
    Label.textContent.replace(("," + NumId).toString(), ""); 
} 
1

标签是一个DOM元素,而不是一个字符串。因此,如果您需要从元素内的文本中获取字符,则必须使用类似var content = Label.textContent; content.indexOf()之类的字符,然后在将字符串替换为textContent后再次替换它。

同样作为一个旁注,尝试查找innerHTML,textContent和innerText之间的差异,以便您可以避免将来的问题。

1

您需要更换指定的东西:

Label.textContent = Label.textContent.replace(…)