2017-03-03 3 views
0

이 자바 스크립트 함수가 있습니다. 버튼에서 숫자를 보내면 색인 방법의 문제가 발생하기 전까지는 문제가 있습니다.Javascript indexOf 및 replace - 뭔가 내가 누락되었습니다.

CODE : 나는 또한,는 TextContent와 를 텍스트를 삽입하기 때문에

<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> 

내가 메신저 확신 뭔가를해야만이 replace에 문제가 있습니다, 어쩌면 그 생각했다.

감사합니다.

답변

1

HTMLElement에는 indexOf 메소드가 없습니다. StringtextContent이 변경되면 method.remeber 재설정 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

마찬가지로'indexOf','HTMLElement'는'replace' 메소드가 없지만'String'은 있습니다. –

1

기능 :

var element = document.getElementById(id); 

는 문자열 요소 객체, 또는 null하지만 돌려줍니다.

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

라벨 DOM 요소가 아닌 문자열입니다

은 아마 당신은 당신이 좋아 작업중인 하나가 될 것으로 보인다 textContent 속성을 사용하는 코드를 변경하고 싶습니다. 따라서 요소 안의 텍스트에서 문자를 가져와야하는 경우 var content = Label.textContent; content.indexOf()과 같은 것을 사용하고 문자열에서 바꾸면 textContent를 다시 바꿔야합니다.

사이드 노트로 innerHTML, textContent 및 innerText 간의 차이점을 찾아보고 향후 문제를 피할 수 있도록하십시오.

1

:

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