Javascript indexOf 和替换 - 我是不是遗漏了什么

Javascript indexOf and replace - am I missing something

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

代码:

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

有问题

非常感谢!

函数:

var element = document.getElementById(id);

Returns 一个 Element 对象,或 null 但不是字符串。

也许您想更改代码以使用 textContent 属性,这似乎是您正在处理的代码:

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

标签是 DOM 元素,不是字符串。所以如果你需要从元素内部的文本中获取字符,你必须使用类似var content = Label.textContent; content.indexOf()的东西,然后在字符串中替换它之后再次替换textContent。

作为旁注,请尝试查找 innerHTML、textContent 和 innerText 之间的差异,以避免将来出现问题。

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>

您需要将替换分配给某物:

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