Javascript 当属性src为null或空时,为什么.prop(';src';)返回错误的值?

Javascript 当属性src为null或空时,为什么.prop(';src';)返回错误的值?,javascript,jquery,Javascript,Jquery,$('img')。单击(函数(){ 警报($(this.prop('src')) }) 当SRC为空时,$(这)重新运行IMG对象,SRC返回对象上下文和baseURI。您可以通过在控制台中查看对象属性来查看它: $('img').click(function () { alert($(this).prop('src')) console.log($(this)); }) 根据官方文件: HTMLImageElement.src 是反映src HTML属性的DOMString

$('img')。单击(函数(){
警报($(this.prop('src'))
})

当SRC为空时,$(这)重新运行IMG对象,SRC返回对象上下文和baseURI。您可以通过在控制台中查看对象属性来查看它:

$('img').click(function () {
    alert($(this).prop('src'))
    console.log($(this));
})

根据官方文件:

HTMLImageElement.src 是反映src HTML属性的DOMString,包含图像的完整URL,包括基本URI

这显然意味着,如果没有任何进入
src
的路径,
src
属性将只等于
基本URI

链接:

javascript的一个快速解决方法是,如果
src
的值为空,则将其设置为
null

var src = $(this).prop('src') || null;
jsfiddle:

关于你的
.attr()与.prop()
的问题,我建议你去那里

属性和属性之间存在同步,但并非所有情况都是如此。例如,“href”和“src”不同步。在您的情况下,您需要使用

$('img').click(function () {
  alert($(this).attr('src'))
})
或者使用vanilla JS时使用
getAttribute()
。您可以在这里了解更多->

这是因为:

alt
src
IDL属性必须是相同名称的相应内容属性

当获取具有URL值的反射IDL属性时,您将获得绝对值:

如果反射IDL属性是其内容为 属性定义为包含URL,然后在获取时包含IDL 属性必须是相对于的内容属性的值 元素并返回结果(如果是) 成功,否则返回空字符串


如果不希望出现这种行为,可以使用
getAttribute
获取内容属性,而不是IDL属性。

为什么要删除我的编辑?我为您提供了一个工作的JSFIDLE,并使不可见和不可点击的图像可见和可点击。@Olander,因为我不希望每个人都必须重定向到另一个页面来检查我的示例。它已经在页面上了。SO的每个人都在使用JSFIDLE提供运行示例。您当前的代码在这里也不起作用。单击图像并亲自尝试,不会发出警告消息。@夹竹桃你确定吗?你试过了吗?只需单击,它就会发出警报
http://fiddle.jshell.net/g9d8e4wh/show/
@Oleander这是因为堆栈片段功能不允许发出
警报
;否则,代码运行正常。当然,仍然值得注意。
$(this).attr('src')| | null
更短。对不起,我没有提到
.attr('src')
。您可以编辑演示,用
prop
替换
attr
。它将发出警报
http://fiddle.jshell.net/_display/
那么,为什么
attr
,为什么
prop
?我想使用
.prop
,因为它比
.attr()快。
@Wolf先生根据您的评论编辑了答案(@)Oriol IDD感谢您的热情:)小问题:
src
为什么在您的第一个引用中被称为
属性
?我想是
src
property@Mr.Wolf通常也被称为。官方名称不同,因为一个由Web IDL定义,另一个由ECMAScript定义。很抱歉,有很多问题,但是您的所有链接都没有提到如何使用
.prop()
检查
src
是否为空。类似这样:
if($('img').prop('src')==null('img').prop('src')==''){}
jQuery的
prop
返回IDL属性(属性)。jQuery的
attr
返回内容属性。前者是解析的绝对URL,后者是HTML代码中使用的值。