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代码中使用的值。