Javascript - getAttribute 不适用于 getElementsByTagName

标签 javascript html

我想使用 JavaScript 检测 img 标签中 src 的第一个字母,并在第一个字母与“l”不匹配时显示警报:

HTML:

<!DOCTYPE html>
<html>
<body>
<script src="imgDetect.js"></script>
<img src="l.jpg" />
<img src="a.jpg" />

</body>
</html>

Javascript:

x = document.getElementsByTagName('img').getAttribute('src');
if (x.charAt(0)!=='l'){
window.alert("message")
}

问题是 getAttribute 无法与 getElementsByTagName 一起使用。

警报将显示 getElementsByTagName 是否替换为 getElementById(仅用于检测单个元素), 我希望它适用于 getElementsByTagName

中的所有标签

最佳答案

这是因为 getElementsByTagName 返回一个 NodeList 对象,该对象是一个引用多个元素的类似数组的对象。

因此 document.getElementsByTagName('img') 没有名为 getAttribute 的方法,调用该方法将导致错误。相反,您需要遍历列表并测试每个元素

x = document.getElementsByTagName('img');
for (var i = 0; i < x.length; i++) {
    if (x[i].getAttribute('src').charAt(0) !== 'l') {
        window.alert("message")
    }
}

演示:Fiddle

<小时/>

此外,在您的脚本中,您已将脚本包含在页眉中,执行该脚本时,页面正文尚未加载,因此 document.getElementsByTagName('img') 不会' t 返回任何元素。

您可以使用窗口的加载方法来执行脚本或将脚本移动到页面底部

使用onload

window.onload = function () {
    //this part of the script will be executed after the document is loaded completely
    var x = document.getElementsByTagName('img');
    for (var i = 0; i < x.length; i++) {
        if (x[i].getAttribute('src').charAt(0) !== 'l') {
            window.alert("message")
        }
    }
}

底部脚本

<img src="l.jpg" />
<img src="a.jpg" />
<script src="imgDetect.js"></script>

关于Javascript - getAttribute 不适用于 getElementsByTagName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29935464/

相关文章:

javascript - 更改 HTML 页面图标?

javascript - 使用函数作为参数

javascript - HTML/CSS/JS 初学者错误

javascript - 正则表达式 - 如果模式以//注释开头,则避免匹配

javascript - 如何在 vue js html 的文本框中显示选定的计划值?

javascript - $ ('.class' ).html() 造成违规行为

javascript - Safari 和 Chrome 中的 HTML5 视频海报属性

javascript - Angular JS,从 json ionic 读取

javascript - Reactjs,redux 授权注销问题

html - Bootstrap 4 - 使 div 变为正方形时内容会粘在 div 的底部