2017-03-03 4 views
0

Ich habe diese Javascript-Funktion; Ich sende es eine Nummer von einem Knopf und alles geht gut, bis die Index-of-Methode es ein Problem hat.Javascript indexOf und ersetzen - bin ich etwas fehlt

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> 

ich dachte, seine vielleicht, weil ich Text mit textcontent einfügen, auch im ziemlich sicher somthing mit dem replace falsch ist.

Vielen Dank!

Antwort

1

HTMLElement hat keine Methode indexOf. String besass die Methode.Remeter Reset textContent, wenn die textContent geändert.

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

Ok, aber warum das ersetzen Arbeit dowsnt? –

+0

Einfach 'indexOf', das' HTMLElement' hat keine Methode 'replace', aber die' String' hat. –

1

Die Funktion:

var element = document.getElementById(id); 

Gibt ein Element Objekt oder null, aber kein String.

Vielleicht möchten Sie den Code ändern textContent Eigenschaft zu verwenden, die die, die Sie gerade arbeiten wie zu sein scheint:

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

Label ist ein DOM-Element, kein String. Wenn Sie also Zeichen aus dem Text innerhalb des Elements abrufen müssen, müssen Sie etwas wie var content = Label.textContent; content.indexOf() verwenden und dann den textContent erneut ersetzen, nachdem Sie ihn in der Zeichenfolge ersetzt haben.

Versuchen Sie auch, die Unterschiede zwischen innerHTML, textContent und innerText nachzuschlagen, damit Sie zukünftige Probleme vermeiden können.

1

Sie müssen den Ersatz etwas zuzuweisen:

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

Verwandte Themen