JQ 和 JS原生操作属性及样式的总结

在云笔记中发现了很久以前写的总结,看着总结还能想到当初认认真真一个一个浏览器测试的样子。

【目录】

1 jQuery操作属性及样式
1.1 设置或返回被选元素的属性值
1.2 访问匹配元素的样式
1.3 为每个匹配的元素添加类名
2 JS获取DOM对象CSS属性值
2.1 只能获取行内样式属性值
2.2 IE9以上谷歌火狐QQ获取当前元素所有最终使用的CSS属性值
2.3 IE9以上谷歌火狐QQ获取行内、非行内样式属性值
2.4 IE获取当前应用的最终CSS属性值
2.5 IE9以上谷歌火狐QQ获取当前元素所有最终使用的CSS属性值
2.6 IE浏览器获取当前元素所有最终使用的CSS属性值
3 JS获取DOM对象属性名称
3.1 getAttribute():返回指定属性名的属性值

1. jQuery操作属性及样式

注意辨析.png
设置或返回被选元素的属性值
$("img").attr("src");
$("img").attr({ src: "test.jpg", alt: "Test Image" });
访问匹配元素的样式
$("p").css("color");
$("p").css({ "color": "#ff0011", "background": "blue" });
为每个匹配的元素添加类名
$("p").addClass("selected1 selected2");

2. JS获取DOM对象CSS属性值

2.1 只能获取行内样式属性值
说明:

element.style //只能获取内嵌样式

注意:

IE8、IE7、IE5(IE6没测试)不支持document.getElementsByClassName,IE9以上可以
用getElementById上述IE可实现(新属性border-radius等不包括)

示例:

<style>
    .demo{ width: 100px; height: 100px; line-height: 100px; text-align: center;}
</style>
<div class="demo" index="info" style="font-size:22px;background: deeppink;color: #fff;border: 4px solid green;margin: 10px 20px 30px 40px;border-radius:10px;" >测试测试</div>
<script>
//无法获取非行内样式
console.log(document.getElementsByClassName('demo')[0].style.background);//deeppink
console.log(document.getElementsByClassName('demo')[0].style.width);//空白
//可以获取复合属性
console.log(document.getElementsByClassName('demo')[0].style.border);//4px solid green
console.log(document.getElementsByClassName('demo')[0].style.margin);//10px 20px 30px 40px
//注意驼峰式写法
console.log(document.getElementsByClassName('demo')[0].style.fontSize);//22px
console.log(document.getElementsByClassName('demo')[0].style.borderRadius)//10px
console.log(document.getElementsByClassName('demo')[0].style.border-radius)//报错
console.log(document.getElementsByClassName('demo')[0].style.font-size);//报错
</script>
clipboard.png
2.2 IE9以上谷歌火狐QQ获取当前元素所有最终使用的CSS属性值
说明:

window.getComputedStyle(element,伪类)//是一个可以获取当前元素所有最终使用的CSS属性值

注意:

目前有文章说这个是 "非IE浏览器获取非内嵌样式" ,经测试,在IE6-8不支持该方法,在IE9以上可以正常输出

示例:

<style>
#div {width: 666px;background: yellow;}
</style>
<div id="div" style="color: red;font-size: 20px; width: 12px;"></div>
<script>
    var div = document.getElementById('div');
    var width = window.getComputedStyle(div, null).width;
</script>
clipboard.png
2.3 IE9以上谷歌火狐QQ获取行内、非行内样式属性值
说明:

document.defaultView:返回当前文档关联的window对象
Window.getComputedStyle( ):“返回元素的计算后的css样式

注意:

网上的文章说这个//非IE浏览器获取非内嵌样式,经测试发现,IE9\IE10\谷歌\火狐\qq浏览器均可获取行内、非行内样式

示例:

<style>
.demo {width: 100px;height: 100px;line-height: 100px;text-align: center;}
</style>
<div id="demoid" class="demo" index="info" style="font-size:22px;background: deeppink;">测试测试</div>
<script>
var div = document.getElementsByTagName("div")[0];
console.log(document.defaultView.getComputedStyle(div, null).fontSize)//22px
console.log(document.defaultView.getComputedStyle(div, null).textAlign) //center          
</script>
clipboard.png
2.4 IE获取当前应用的最终CSS属性值
说明:

element.currentStyle //currentStyle是IE浏览器自己的一个属性,其语法与ele.style类似,差别在于element.currentStyle返回的是元素当前应用的最终CSS属性值(包括外链CSS文件,页面中嵌入的<style>属性等)

注意:

这个方法只有IE浏览器支持(经测试IE5以上都可以),谷歌火狐QQ均不支持
对于综合属性border等,,IE8及以下是返回undefined,IE8以上返回空白,对于margin这样的复合属性IE浏览器可以正确返回

示例:

<style>
    .demo { width: 100px; height: 100px; line-height: 100px; text-align: center; font-size:32px;}
</style>
<div id="demoid" class="demo" index="info" style="font-size:22px;background: deeppink;color: #fff;border: 4px solid green;margin: 10px 20px 30px 40px;border-radius:10px;">测试测试</div>
<script>
console.log(document.getElementById('demoid').currentStyle.width); //100px
console.log(document.getElementById('demoid').currentStyle.border); //空白,IE8及以下是undefined
console.log(document.getElementById('demoid').currentStyle.margin); //10px 20px 30px 40px
console.log(document.getElementById('demoid').currentStyle.fontSize); //22px
console.log(document.getElementById('demoid').currentStyle.borderLeftWidth)//4px
console.log(document.getElementById('demoid').currentStyle.index)//undefined
</script>
clipboard.png
2.5 IE9以上谷歌火狐QQ获取当前元素所有最终使用的CSS属性值
说明:

getComputedStyle是一个可以获取当前元素所有最终使用的CSS属性值。返回的是一个CSS样式声明对象([object CSSStyleDeclaration]),只读。

注意:

getPropertyValue不支持驼峰写法。兼容IE9及以上,FF,Chrom,火狐,QQ,Safari,Opera)

示例:

<style>
    .demo { width: 100px; height: 100px; line-height: 100px; text-align: center; font-size:32px;}
</style>
<script>
var test = document.getElementById('demoid');
console.log(window.getComputedStyle(test, null).getPropertyValue("background-color"));//rgb(255, 20, 147)
console.log(window.getComputedStyle(test, null).getPropertyValue("font-size"));//22px
console.log(window.getComputedStyle(test, null).getPropertyValue("fontSize"));//空白
console.log(window.getComputedStyle(test, null).getPropertyValue("index"));//空白
</script>
clipboard.png
2.6 IE浏览器获取当前元素所有最终使用的CSS属性值
说明:

只支持IE浏览器

注意:

属性名需要写成驼峰写法,否则IE6不支持,如果无视IE6,可以写成”background-color”

示例:

<style>
    .demo { width: 100px; height: 100px; line-height: 100px; text-align: center; font-size:32px;}
</style>
<div id="demoid" class="demo" index="info" style="font-size:22px;background: deeppink;color: #fff;border: 4px solid green;margin: 10px 20px 30px 40px;border-radius:10px;">测试测试</div>
<script>
console.log(document.getElementById('demoid').currentStyle.getAttribute("color"));//#fff
console.log(document.getElementById('demoid').currentStyle.getAttribute("fontSize"));//22px
console.log(document.getElementById('demoid').currentStyle.getAttribute("border"));//null
console.log(document.getElementById('demoid').currentStyle.getAttribute("margin"));//10px 20px 30px 40px
console.log(document.getElementById('demoid').currentStyle.getAttribute("backgroundColor"));//deeppink
console.log(document.getElementById('demoid').currentStyle.getAttribute("background-color"));//deeppink
</script>
clipboard.png

3. JS获取DOM对象属性名称

3.1 getAttribute():返回指定属性名的属性值
说明:

getAttribute() 方法返回指定属性名的属性值,所有主流浏览器均支持 getAttribute() 方法。

注意:

经测试发现,IE578910\谷歌\火狐\qq浏览器均可

示例:

<a href="#" target="_blank" style="color: red;"></a>
console.log(document.getElementsByTagName("a")[0].getAttribute("target")); //_blank
console.log(document.getElementsByTagName("a")[0].getAttribute("color")); //null
clipboard.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,722评论 1 92
  • 前端开发面试知识点大纲: HTML&CSS: 对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:...
    秀才JaneBook阅读 2,324评论 0 25
  • <a name='html'>HTML</a> Doctype作用?标准模式与兼容模式各有什么区别? (1)、<...
    clark124阅读 3,453评论 1 19
  • 主角:Tail·Gray 年龄:25岁 地点:美国纽约 主要背景:主角是中美混血,很小的时候父母双亡,被老师收养,...
    X麒阅读 78评论 0 0
  • 在感情的世界里,最伤人的不是你有多么的渣,而是优柔寡断,拉拉扯扯,如果两个人确定已经不能在一起了,在勉强的话,痛苦...
    晴宝三岁阅读 731评论 0 1