测试数组中每个项的内容

Testing contents of each item in an array

本文关键字:数组 测试      更新时间:2023-09-26

我知道我一定在做一些愚蠢的事情,但请快速提醒一下可能会对我有所帮助。

我使用了几种方法将节点列表转换为数组。我不会让你厌烦各种各样的尝试。是的,我可以读取新数组,但尝试检查其中一个数组项是否包含特定的字符串模式失败。

一个例子:

function getthelinks() {
    var nl = document.querySelectorAll('a');
    var arr = Array.prototype.slice.call(nl);
    for (var i = 0; i < arr.length; i++) {
        var n=arr[i].indexOf(".mov");   // <------- it's this that fails!
    }
}

因此,我们的想法是测试页面中的链接,寻找以"a href"调用.mov格式电影URL结尾的电影链接。

这是为了让我可以将页面阅读器发送到一个新的页面,html5格式,以查看视频,而不是下载它。

那么,为什么我得到TypeError: nl[i].indexOf is not a function呢?

我只是想找到一种快速的方法来列出直接指向页面中电影文件的链接调用,而无需直接编辑页面。

非常感谢任何能向我展示我犯的愚蠢错误的人。

删除了失败代码行的页面如下:http://www.microscopy-uk.org.uk/AAA-test-intercept.html

由于您试图在HTML节点上使用indexOf(一种字符串方法),因此发生错误。必须首先访问节点的href属性:var n = arr[i].href.indexOf(".mov");

此外,如果你只想知道url是否以.mov结尾,你可以使用如下测试:

if (arr[i].href.endsWith(".mov")) {
    // Do some magic.
}

这是对Andrew的回答的支持,它确实完全解决了您的问题。

此外,您可以通过以下简洁的方法找到href attributr值以.mov结尾的锚元素:

var movLinks = document.querySelectorAll("[href$='".mov'"]");

这样你就不需要循环和过滤了。