【问题标题】:Accessing JavaScript array strings using jquery each method使用 jquery each 方法访问 JavaScript 数组字符串
【发布时间】:2021-12-20 23:13:54
【问题描述】:

我想通过 jquery 访问 Java Script 字符串元素(在一个数组中)。我编写了简单的方法来模拟我正在尝试做的事情。此方法导致 RangeError 异常。

function test() {
    var arr = ["janusz", "renia"];
    $(arr).each(function () {
        var  el = $(this).text();
        console.log(el);
    });
}

控制台中的错误如下所示:

jquery.js:1602 Uncaught RangeError: Maximum call stack size exceeded
    at Sizzle.getText (jquery.js:1602)
    at Sizzle.getText (jquery.js:1610)
    at Sizzle.getText (jquery.js:1610)
    at Sizzle.getText (jquery.js:1610)
    at Sizzle.getText (jquery.js:1610)
    at Sizzle.getText (jquery.js:1610)
    at Sizzle.getText (jquery.js:1610)
    at Sizzle.getText (jquery.js:1610)
    at Sizzle.getText (jquery.js:1610)
    at Sizzle.getText (jquery.js:1610)
…

为什么我不能通过each 方法中的'this' 对象访问字符串?

【问题讨论】:

    标签: javascript java jquery


    【解决方案1】:

    .text() 用于从 元素 中检索文本。这里没有任何 DOM 元素,只有一个由字符串组成的普通数组。

    抛出错误是因为getText(jQuery 在尝试获取元素的文本时调用)确实

    getText = Sizzle.getText = function( elem ) {
        var node,
            ret = "",
            i = 0,
            nodeType = elem.nodeType;
    
        if ( !nodeType ) {
            // If no nodeType, this is expected to be an array
            while ( (node = elem[i++]) ) {
                // Do not traverse comment nodes
                ret += getText( node );
            }
        }
    

    导致无限递归。

    虽然您可以在严格模式下仅引用 this 以使其引用正在迭代的字符串...

    'use strict';
    
    var arr = ["janusz", "renia"];
    $(arr).each(function() {
      console.log(this);
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    完全放弃 jQuery 并使用纯 JavaScript 会容易得多。

    var arr = ["janusz", "renia"];
    for (const item of arr) {
      console.log(item);
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>

    var arr = ["janusz", "renia"];
    arr.forEach((item) => {
      console.log(item);
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>

    var arr = ["janusz", "renia"];
    for (let i = 0; i < arr.length; i++) {
      console.log(arr[i]);
    }
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"&gt;&lt;/script&gt;

    如果您是编程新手,我个人建议您仅在需要时才使用 jQuery,而不是尝试将其用于绝对一切(不幸的是,这是一种常见的范例)。

    【讨论】:

      猜你喜欢
      • 2021-03-31
      • 2013-01-03
      • 2011-05-02
      • 2011-11-18
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      相关资源
      最近更新 更多