【问题标题】:Using a Lodash collection function on jquery elements在 jquery 元素上使用 Lodash 集合函数
【发布时间】:2018-01-17 15:52:50
【问题描述】:

我正在尝试在 jQuery 元素集合上使用 lodash 的 _.partition,如下所示:

const $elements = $('<div class="outer"><div class="thisOne">thisOne</div><div>not thisOne</div><div>nor thisOne</div></div>').children();
// the above line ends up printing {0: <div class="thisOne">thisOne</div>, 1: <div>not thisOne</div>, 2:<div>nor thisOne</div>, length: 3} I may have mis-rememebered how it gets there.
// regardless it's a list of $jQuery elements
const [$matched, $unmatched] = _.partition($elements, element => element.text() === "thisOne");

$matched.forEach(element => expect(element).toHaveClass("thisOne"));
$unmatched.forEach(element => expect(element).not.toHaveClass("thisOne"));

但我的错误在第二行,它说element.text() 不是函数。

我已经看到了这个问题jQuery .each() function with ES6 arrow functions,我认为这不算数,因为这不是像each 这样的jQuery 数组函数,应该只对每个元素进行操作。将其更改为(index, element) =&gt; element.text() === "thisOne" 仍然不起作用,所以我认为这根本不是原因。

我做错了什么?

【问题讨论】:

    标签: javascript jquery lodash


    【解决方案1】:

    问题在于_.partition($elements, element =&gt; element.text() === "thisOne") 的结果是该元素不是 jQuery 元素,而是原生dom 元素。

    要纠正这个问题,您需要像这样在元素周围应用$(...)

    element => $(element).text()
    

    这确保每个元素在运行 jQuery 函数之前都是 jQuery 感知的。

    【讨论】:

    • 为什么我在发布问题后不久就发现了这一点?
    • element.textContent === "thisOne"
    • @gaetanoM 我会在下次有能力的时候尝试一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多