html - javascript无法修改带px单位的标签宽度
迷茫
迷茫 2017-04-10 17:00:51
[JavaScript讨论组]

描述问题

javascript改变img宽度属性,如果带px单位,结果变为0;

相关代码

<img id="iImg" width="300px" height="300px" onclick="changeImg()" src="">

document.getElementById("iImg").width=600;    //结果为  width="600";
document.getElementById("iImg").width="600px";//结果为  width="0"

相关截图

如果要实现改变后的宽度为600px,改怎么做?
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(6)
PHP中文网

1.代码规范

<img id="iImg" width="300px" height="300px" onclick="changeImg()" src="">

其中width="300px" height="300px"这种写法是不符合w3c规范的,用 The W3C Markup Validation Service 检测会报错。属性width、height的值是个非负数,直接写数字即可,如width="300"

2.width是img公认的(非自定义的)特性,会以属性的形式添加到DOM对象中,所以可以通过dom.attr的形式去操作属性值。

imgDom.width = value;//此处的value是个number类型的非负值,若value为其他值时,转化为0
console.log(typeof imgDom.width)//为number类型

document.getElementById("iImg").width=600;    //方式①,结果为 width="600"; 赋值成功 
document.getElementById("iImg").width="600px";//结果为 width="0" 赋值失败

因为width是img的属性,所以当然也可以用下面这种形式赋值:

document.getElementById("iImg").setAttribute("width", "600");//方式②

3.方式①②是通过改变img的属性值来改变图片的大小,也可以通过改变css样式来改变图片的大小,当两者同时改变,谁又占上风呢?

document.getElementById("iImg").style.width='600px';//方式③,这个是带px的,图片width渲染成功
document.getElementById("iImg").width=900;//只改变属性值,但不影响图片的大小

综上,如果只是改变图片显示的大小,可以使用上述三种方式来达到目的,当有css样式来控制图片大小的时候,属性值的改变不影响图片的实际渲染尺寸:

document.getElementById("iImg").width=600;//方式①,通过改变属性值来改变图片大小
document.getElementById("iImg").setAttribute("width", "600");//方式②,通过改变属性值来改变图片大小
document.getElementById("iImg").style.width='600px';//方式③,通过css样式来改变图片大小

补充:方式①和方式②的区别
当属性为自定义属性时,dom.attr的方式失效,如:

<!-- width为p的自定义属性,非公认的,不会以属性的形式添加到DOM对象中 -->
<p id="test" width="600">SegmentFault</p>
document.getElementById("test").width; //undefined
document.getElementById("test").width = 1200; //无效
document.getElementById("p").setAttribute("width", "1200");//只能通过这种方式改变属性width的值,但不管怎么改变,都不会影响p的宽度值,因为width只是p的一个自定义属性
黄舟
document.getElementById("iImg").setAttribute("width", "600px");

或者修改CSS样式

PHP中文网

首先img是行内元素。你设置宽高是不起作用的,请给img加样式display:block。这些应该可以设置宽高了。

怪我咯
document.getElementById("iImg").style.width='600px'
高洛峰

嗯,建议用css,或者用style=“width:600px”,然后再用js修改

伊谢尔伦

xxx.style.width

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号