【问题标题】:Cross reference two lists for a single match in JQuery交叉引用 JQuery 中单个匹配项的两个列表
【发布时间】:2026-02-07 00:40:01
【问题描述】:

我在 Javascript 中有两个列表:

  • newClass - 这是一个字符串列表(类名)
  • hiddenVals - 这是来自$('input:hidden') 的隐藏输入元素列表,其中包含值...

我基本上希望能够通过 newClass 列表并检查 hiddenVals 中是否存在匹配项。如果是这样,我会得到那个 hiddenVal 的值。

我有以下工作,但我可以帮助但认为 JQuery 有一种更简洁的方法:

            var newClass = ui.item[0].parentElement.classList;
            var hiddenVals = $j('input:hidden');
            var newStatusId = -1;

            for (var i = 0; i < hiddenVals.length; i++) {

                var hiddenClass = hiddenVals[i].classList[0];

                for (var x = 0; x < newClass.length; x++) {

                    var test = newClass[x];

                    if (test == hiddenClass) {
                        newStatusId = hiddenVals[i].value;
                    }
                }
            }

我希望这是有道理的,有人可以帮助适当地重构它。

【问题讨论】:

  • 所以.kanban-sortable2-Development 的父级?你能多显示一点 HTML 吗?
  • 我已经添加了正在使用的生成 HTML 的代码快照...我希望这可以对我正在尝试做的事情有所启发。

标签: jquery class


【解决方案1】:

这里有一些改进建议。

// use const for constant variables
const classes = ui.item[0].parentElement.classList;
// and let for variables that may change
let newStatusId = -1;

// jQuery's .each() will loop through all elements selected
$('input:hidden').each(element => {
    // for of loop is nicer syntax
    for(let c of classes) {
        // you should use === instead of == to conserve type when comparing
        // but jQuery has .hasClass() which may help
        if($(element).hasClass(c)) {
            newStatusId = $(element).value;
        }
    }
});

参考
consthttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const
lethttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
for of循环https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of
.each()https://api.jquery.com/each/
.hasClass()https://api.jquery.com/hasclass/
===Which equals operator (== vs ===) should be used in JavaScript comparisons?

【讨论】:

  • 我不确定我是否已经非常清楚地说明了我的情况。我只是让它按我的意愿工作(使用一些 for 语句)然后会更新我的问题,看看是否有更有效的方法来获得相同的结果。
  • 我已经更新了这个问题......希望现在我已经把垃圾删掉了。
  • 看起来你明白了。我会用我写这个的方式更新我的答案(有很多方法!)
  • 看起来很棒而且很有意义...谢谢!我只是想实现,但在 .hasClass 检查中没有得到任何匹配。只是想看看我能不能找出原因。
最近更新 更多