使用原型js进行元素选择

时间:2013-03-15 13:26:29

标签: javascript regex dom prototypejs

我在页面上遇到一些问题,我有一个输入来获取产品EAN代码并将其与产品表格列表进行比较,并将标识为ean_xxxx的输入框更新为oldValue+1 。我目前的代码如下:

function updateProductQty(ean) {
    var inputs = document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {
        if(inputs[i].id == "ean_" + ean)
        {
            inputs[i].value = Number(inputs[i].value) + 1;
        }
    }
}

我在EAN代码onchange="updateProductQty(this.value);"

的输入上使用此代码调用

现在的问题是标识为ean_xxxxx的输入框位于表格行内,我还需要与之前的TD标记中的值进行比较。我正在寻找的值被这样的HTML所包围:

<td>
    <h5 class="title">....</h5>
    <div><strong>...</strong> A252502</div>
    <dl class="item-options">
        <dt>...</dt>
        <dd>..</dd>
    </dl>
</td>
.... more <td>-tags
<td> ... <input id="ean_xxxx" .... /> ... </td>

正如您所看到的,当我找到输入标记时,我永远不知道表格中的哪一行,而我想要添加检查的值是“A252502”。

该网站使用Prototype作为js框架,我没有这方面的经验,所以我主要使用基本的JS,谷歌让我失去原型解决方案。

如果我只能获得TD内容,我可以剥离-tag和任何空格来获取值 - 但是如何搜索它?我甚至无法退回DOM树,因为我要么获得EAN代码,要么获得此内部文章ID,而不是两者。所以没有inputs[i]开始。任何帮助都非常受欢迎,无论它是Prototype语法还是基本JS。

1 个答案:

答案 0 :(得分:1)

我设法解决了这个问题。方法如下:

function updateProductQty(ean) {
    var input = $("ean_" + ean);
    if (input) {
        input.value = Number(input.value) + 1;
    } else {
        var trs = $$('.order-tables tbody tr');
        for (var i = 0; i < trs.size(); i++) {
            if (trs[i].down('div')) {
                if (trs[i].down('div').innerHTML.split(" ")[1] == ean) {
                    trs[i].down('td').next(4).down('input').value = Number(trs[i].down('td').next(4).down('input').value) + 1;
                }
            }
        }
    }
}