首页 > 解决方案 > href 使用 .attr()、.prop()、.each() 等返回未定义但能够返回值

问题描述

const results = $(".someclass")
    .map((index, element) => {
        const hrefValue = $(element).find("a").prop("href");
        // or...
        const hrefValue2 = $(element).find("a").attr("href");
      
        return { hrefValue };
    })
    .get();
    console.log(results);

控制台日志给了我我的期望。(财产的价值href)。例如https://www.google.com

但是,如果我尝试使用任何字符串方法修改 href 值(根据类型,它是一个“字符串”),例如

const hrefValue = $(element).find("a").prop("href").toUpperCase();

我得到错误:TypeError: Cannot read property 'toUpperCase' of undefined

我研究的所有内容都指向 jquery 返回未定义,但我不认为这里的情况并非如此,因为我确实得到了返回的值。我只是无法使用字符串方法一路修改它,这是我不确定的部分,为什么。

编辑:它是 puppeteer,所以它正在抓取,但这里是 HTML 的要点:

<div className="someclass">
    <a href="https://www.google.com>google</a>
</div>

我能够返回该值,并且type of是“字符串”,但如果我尝试使用字符串方法对其进行修改,则会出现未定义的错误。

解决方案:感谢@epascarello 的解决方案。抓取的 puppeteer 数组中的第一个对象确实是空白的。这就是它给出未定义错误的原因。

一旦我在 .map() 前面放置了一个 `.slice(1),结果就会在控制台中正确显示,而不会出现未定义的错误。

标签: javascriptjquerypuppeteer

解决方案


解决方案:感谢@epascarello 的解决方案。抓取的 puppeteer 数组中的第一个对象确实是空白的。这就是它给出未定义错误的原因。

一旦我在 .map() 前面放置了一个 `.slice(1),结果就会在控制台中正确显示,而不会出现未定义的错误。


推荐阅读