【问题标题】:element selection with prototype js使用原型 js 进行元素选择
【发布时间】:2013-03-04 05:48:09
【问题描述】:

我在输入产品 EAN 代码并将其与产品列表进行比较并将 ID 为 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);" 的输入上使用此代码调用

现在的问题是 ID 为ean_xxxxx 的输入框位于表格行内,我还需要与之前的 TD-tag 中的值进行比较。我正在寻找的值被 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,而 Google 无法提供 Prototype 解决方案。

如果我能得到 TD 内容,我可以去掉 -tag 和任何空格来获取值 - 但是如何搜索它呢?我什至无法返回 DOM 树,因为我要么得到 EAN 代码,要么得到这个内部文章 ID,而不是两者。所以没有inputs[i] 开始。任何帮助都非常感谢,无论是原型语法还是基本 JS。

【问题讨论】:

  • 是的,你真的应该使用id selector 来输入
  • 我正在寻找的是来自 内部的 html &lt;div&gt;&lt;strong&gt;...&lt;/strong&gt; A252502&lt;/div&gt;A252502 - 我无法更改 HTML 输出,我必须使用 JS。
  • "A252502" 甚至不是一个元素,因此选择它很棘手。你可以试试document.getElementById('ean_'+ean).parentNode.parentNode.firstElementChild.querySelector("div strong").nextSibling(不确定原型等效)
  • 哦,我明白你的意思了。我现有的获取输入标签的代码。我尝试只使用 id 选择器,但原型让我发疯——我一定有充分的理由不使用它。也许我放弃了正确的语法。
  • 我无法从 EAN 输入中遍历,因为它要么是 EAN,要么是我作为输入而不是两者的文章编号。但我现在离我更近了。清理了我现有的代码并找到了正确的 DIV,所以我现在的输出是&lt;strong&gt;...&lt;/strong&gt; A252502。现在找到一些方法来获得最后一个单词或按空格分割......

标签: javascript regex dom prototypejs


【解决方案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;
                }
            }
        }
    }
}

【讨论】:

  • 你应该可以做到input.value++;
猜你喜欢
相关资源
最近更新 更多
热门标签