在从 jQuery 到 JS 的转换中,数组填充了字符串而不是数字

Posted

技术标签:

【中文标题】在从 jQuery 到 JS 的转换中,数组填充了字符串而不是数字【英文标题】:Array gets filled with strings instead of numbers on a conversion from jQuery to JS 【发布时间】:2021-09-10 16:35:04 【问题描述】:

试图将一个小的 sn-p 从 jQuery 转换为 JS,我得到一个包含字符串的数组,而不是一个包含数字的数组。

更准确地说,我是通过用 JS 重写的脚本来实现的:

转换后的JS代码如下:

let pickEl = document.querySelectorAll('.someClass');
        // console.log(pickEl);
        pickEl.forEach(pickEl => 
            let r = new RegExp('(' + term + ')', "ig");

            if(pickEl.textContent.match(r)) 
                // console.log(pickEl.innerhtml.match(r));
                let matches = pickEl.textContent.match(r);

                matches.forEach(function(i) 
                    occurrences.push(i);
                );
                // wrap each found term in span with class found to highlight it
                pickEl.innerHTML.replace(r, '<span class="found">$&</span>');
                console.log(pickEl.textContent.replace(r, '<span class="found">$&</span>'));
            
        );

在 jQuery 中代替这个:

jQuery 代码如下所示:

$('.some').each(function (i) 
            var r = new RegExp('(' + term + ')', "ig");

            if ($(this).html().match(r)) 
                var matches = $(this).html().match(r);
                console.log(matches);
                console.log('Var matches =' + ' ' + matches);
                $.each(matches, function () 
                    occurences.push(i);
                );
                // wrap each found search term with our `found` span to highlight it 
                $(this).html($(this).html().replace(r, '<span class="found">$1</span>'));
            
        );

我应该如何编写JS代码以获得与jQuery相同的数组?

【问题讨论】:

【参考方案1】:

这是因为 i 实际上在您的两个代码中:在本机 JS 版本中,i 指的是 String.prototype.match 返回的条目,而您的 jQuery 版本中的 i 来自 @987654322 @,即索引。

如果要访问索引,则需要从应用于pickEl 的外部forEach 函数中获取它。参考带有// NOTE: 的 cmets,我在其中添加了我的注释:

let pickEl = document.querySelectorAll('.someClass');
    // NOTE: Access the index of the current element
    pickEl.forEach((pickEl, index) => 
        let r = new RegExp('(' + term + ')', "ig");

        if(pickEl.textContent.match(r)) 
            // console.log(pickEl.innerHTML.match(r));
            let matches = pickEl.textContent.match(r);

            matches.forEach(function() 
                // NOTE: Push the index into array
                occurrences.push(index);
            );
            // wrap each found term in span with class found to highlight it
            pickEl.innerHTML.replace(r, '<span class="found">$&</span>');
            console.log(pickEl.textContent.replace(r, '<span class="found">$&</span>'));
        
    );

【讨论】:

以上是关于在从 jQuery 到 JS 的转换中,数组填充了字符串而不是数字的主要内容,如果未能解决你的问题,请参考以下文章

如何在从数据库填充的 Jquery 下拉列表中显示选中的值

在 Node.js 中异步添加到数组

使用 javascript 和 jquery,用数组结构填充相关的选择框

怎样用jquery实现新闻无闪动刷新,用js中工具箱2到3个控件,搜索文本框自动文本框自动填充完成

jquery判断数组是不是为空

jquery如何判断数组是不是为空?