Javascript indexOf和replace - 我错过了什么

时间:2017-03-03 16:06:28

标签: javascript function indexof

我有这个javascript函数; 我从一个按钮发送一个数字,一切顺利,直到它有问题的索引方法。

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

的问题

非常感谢!

4 个答案:

答案 0 :(得分: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 :(得分:1)

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

另外,作为旁注,尝试查看innerHTML,textContent和innerText之间的差异,以便避免将来出现问题。

答案 2 :(得分:1)

HTMLElement没有方法indexOf。String拥有该方法。如果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>

答案 3 :(得分:1)

您需要将替换分配给某些内容:

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