当属性src为null或为空时,.prp('src')为什么返回错误的值
Why does .prop('src') return wrong value when property src is null or empty?
jsfiddle
$('img').click(function () {
alert($(this).prop('src'))
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
<img src="http://www.w3schools.com/tags/smiley.gif" />
<img src="" style="width: 10px; height: 10px; border: 1px solid;">
当我单击第二个图像时,它会提醒http://stacksnippets.net/js
。
为什么?
根据官方文档:
HTMLImageElement.src是一个DOMString,它反映srcHTML属性,包含图像的完整URL,包括基本URI。
这显然意味着,如果不给src
任何路径,src
属性将仅等于base URI
链接:https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement
如果src
的值为空,则一个快速的javascript解决方法是将其设置为null
var src = $(this).prop('src') || null;
jsfiddle:http://jsfiddle.net/g9d8e4wh/1/
关于你对.attr() vs .prop()
的担忧,我建议你去那里.pr()与.attr()
当SRC为空时,$(this)重新运行IMG对象,SRC返回对象上下文和baseURI。您可以通过在控制台中查看对象属性来查看它:
$('img').click(function () {
alert($(this).prop('src'))
console.log($(this));
})
这是因为src
被反射:
alt
、src
IDL属性必须反映相同名称的相应内容属性。
当获得一个具有URL值的反映IDL属性时,您将获得绝对值:
如果反映IDL属性是
DOMString
属性,其内容属性被定义为包含URL,然后在获取IDL时属性必须解析内容属性相对于的值元素,并返回结果的绝对URL(如果是成功,否则为空字符串
如果您不想要这种行为,可以使用getAttribute
来获取content属性,而不是IDL属性。
属性和属性之间存在同步,但并非适用于所有情况。例如,"href"answers"src"不同步。在您的情况下,您需要使用
$('img').click(function () {
alert($(this).attr('src'))
})
或CCD_ 13。您可以在此处了解更多信息->http://javascript.info/tutorial/attributes-and-custom-properties
- 为什么html src属性中的相对url是因为Javascript函数中的完整路径
- 为什么innerHTML不更改图像的src
- 为什么当我尝试为iframe-src属性构建URL时,AngularJS会抛出错误
- 为什么我不得到“;NetworkError”;当我使用<script src=“;false _ ip”>
- Jquery attr src 从 src 中删除了一个字符串,但没有删除更复杂的字符串,为什么
- 为什么 ExpressionEngine 似乎从 iframe 客户端中删除了 src URL
- 为什么内部 html 的 src 属性无法识别我的动态生成的变量
- 为什么允许“src”属性链接到来自外部域的脚本,而 XmlHtppRequests 则不允许
- 为什么ng-src不会触发AngularJS中的某些属性更改
- 为什么 script.src 会像它一样工作
- 为什么要添加“+”和双引号来访问对象的 src
- '替换'改变整个src,而不仅仅是结尾.为什么?
- 为什么可以't改变图像's src属性
- 为什么可以't我将JS代码置于<script src=“">代码</脚本>
- 为什么要放javascript:''作为iframe-src
- 为什么更改图像的src是异步的
- 为什么不't脚本识别空src
- 当属性src为null或为空时,.prp('src')为什么返回错误的值
- 为什么我的iframe's src就是这个页面
- 为什么ng-src需要表达式