您的位置:

首页 >

网络编程 >

javascript获取元素CSS样式代码示例 >

javascript获取元素CSS样式代码示例

2016-06-01 02:18:34

分类:网络编程

使用css控制页面有4种方式,分别为行内样式(内联样式)、内嵌式、链接式、导入式。行内样式(内联样式)即写在html标签中的style属性中,如<div style="width:100px;height:100px;"></div>内嵌样式即写在style标签中,例如<style type="text/css">div{width:100px; height:100px}</style>链接式即为用link标签引入css文件,例如<link href="test.css" type="text/css" rel="stylesheet" />导入式即为用import引入css文件,例如@import url("test.css")如果想用javascript获取一个元素的样式信息,首先想到的应该是元素的style属性。但是元素的style属性仅仅代表了元素的内联样式,如果一个元素的部分样式信息写在内联样式中,一部分写在外部的css文件中,通过style属性是不能获取到元素的完整样式信息的。因此,需要使用元素的计算样式才获取元素的样式信息。用window对象的getComputedStyle方法来获取一个元素的计算样式,此方法有2个参数,第一个参数为要获取计算样式的元素,第二个参数可以是null、空字符串、伪类(如:before,:after),这两个参数都是必需的。来个例子<style type="text/css">#testDiv{  border:1px solid red;  width: 100px;  height: 100px;  color: red;}</style><div id="testDiv"></div>var testDiv = document.getElementById("testDiv");var computedStyle = window.getComputedStyle(testDiv, "");var width = computedStyle.width;  //100pxvar height = computedStyle.height;  //100pxvar color = computedStyle.color;  //rgb(255, 0, 0)[/code]注:获取到的颜色属性都是以rgb(#,#,#)格式返回的。这个时候如果用testDiv.style来获取样式信息,如testDiv.style.width肯定是为空的。 getComputedStyle方法在IE8以及更早的版本中没有实现,但是IE中每个元素有自己的currentStyle属性。so,来个通用的复制代码 代码如下:var testDiv = document.getElementById("testDiv");var styleInfo = window.getComputedStyle ? window.getComputedStyle(testDiv, "") : testDiv.currentStyle;var width = styleInfo.width;  //100px;var height = styleInfo.height;  //100px;var color = styleInfo.color;  // rgb(255, 0, 0) 最后要注意一点,元素的计算样式是只读的,如果想设置元素样式,还得用元素的style属性(这个才是元素style属性的真正用途所在)。

看下面的代码:复制代码 代码如下:if (!("aa" in window)) {      alert('oh my god');    var aa = 1;  }  alert("aa" in window);alert(aa);回答以下问题:会报错吗?会弹出几次?第2个alert是true还是false?第3个alert弹出什么?为什么?思考下,然后测试下,如果你回答正确,那么后面的文章就不用看了。-----------------------------在JS里定义变量太简单了,直接一个var ,甚至不用var都可以:复制代码 代码如下:var a = 1;这里a就是变量名,1就是变量值。唉,这个太基础了。看下面的代码:复制代码 代码如下:var a;alert(a);以firebug测试,会弹出undefined,这个是大家很熟悉的一个字符串了,貌似表示变量未定义。但我觉得,我已经var了啊,这就是定义了嘛,只是没有附值而已。我们来个真正的没有定义的:复制代码 代码如下:alert(a);没错,就是直接alert一个根本没有出现过的变量,这会如何?firebug直接报错了:a is not defined.意思是a没有定义。这个结合前面的代码来看,让人困惑。这个没有定义和前面的未定义有什么不同呢?其实前面的代码等价于这样的:复制代码 代码如下:var a = undefined;alert(a);也就是说,当声明变量而不赋值时,JS会给变量传一个undefined值,注意,这是个“值”,说明a已经有值了,这个值就叫“未定义”。而后面的直接alert,变量从没有出现过,也就是说这才是真正的未定义。简单的说:JS中不存在没有值的变量,变量声明的时候就赋值了。然后我们看下面的代码:复制代码 代码如下:alert(a);var a = 1;这个代码会报错吗?因为在alert的时候变量a还没来得及出现呀。但是这样居然没有报错,而是弹出了undefined值。表明变量a已经存在了,只是值却不是我们想要的,而是undefined。这又是个什么问题呢?因为var 变量声明和函数声明一样,会提前,其实上面的代码是这样的:复制代码 代码如下:var a;alert(a);a = 1;这么一来就懂了。所以,这个问题的关键在于:var 声明会提前到作用域顶端,但附值却不会———好纠结的设定,不知道为什么要这么搞。个人觉得这是JS的一个缺陷。现在有一种代码习惯,主张把变量声明一律放在作用域前方,大概就是考虑到这个——反正就算你不写在前方,JS也会提前到前方。现在放出文首问题的答案:只会弹出两个alert,而if里面的alert不会执行,因为var声明的提前性,导致真正的代码是这个样子:复制代码 代码如下:var aa;if (!("aa" in window)) {      alert('oh my god');    aa = 1;  }  alert("aa" in window);alert(aa);虽然aa为空,但用'aa' in window判断时会为真,因为a确实存在了,而值是undefined。所以if代码不会执行。后面两个alert我就不说了。个人感觉这是一个很无厘头的问题,我们应该了解他的原因,但鄙视他这种陷阱。上面这个问题也是我写这篇文章的缘由,这段代码是我从一篇网文里看到的,但他里面没有答案,我百撕不得骑姐,跑到stackoverflow上去问了才搞清楚。答案就是这篇文章。但这是很基础的问题啊其实!!!哈哈,原谅我,后面还有一个问题:复制代码 代码如下:var b = {}alert(b.aa);alert(b.aa.bb);这也是一种声明变量的方式,那么,这段代码会报错吗?为什么?

举个例子: Css:假定进行如下简单设置; html{height:1000px;} JS: 复制代码 代码如下: function(){ window.scrollBy(0,100); alert(window.pageYOffset); } Results: //点击一次后弹出:100;得出的是一个数值,read-only属性;value:Integer(整数),default:0; 附注:当滚动条到达页面最底部时,

在制作网页的过程中,我们经常写类似下面的代码: [html] 复制代码 代码如下: <html> <head> <title>Example HTML Page</title> <script type="text/javascript" src="example1.js"></script> <script type="text/javascript" src="example2.js"></script> </head> <body> <!-- 这里放内容 --> </body> </html> <html> <head> <title>Example HTML Page</title> <script type="text/javascript" src="example1.js"></script> <script type="text/javascript" src="example2.js"></script> </head> <body> <!-- 这里放内容 --> </body> </html> 按照惯例,所有的<script>元素都应该放在页面的<head>元素中。请注意:无论引用几个外部js文件,浏览器都会按照<script>元素在页面中出现的先后顺序对它们依次进行解析 。换句话说,在第一个<script>元素包含的代码解析完成后,第二个<script>包含的代码才会被解析,然后才是第三个、第四个... 这种做法的目的就是把所有外部文件(包括CSS文件和JavaScript文件)的引用都放在相同的地方。可是,在文档的<head>元素中包含所有JavaScript文件,意味着必须等到全部JavaScript代码都被下载、解析和执行完成以后,才能开始呈现页面的内容(浏览器在遇到<body>标签时才开始呈现内容)。对于那些需要很多JavaScript代码的页面来说,这无疑会导致浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口将是一片空白。为了避免这个问题,现代Web应用程序一般都会把全部JavaScript引用放在<body>元素中,放在页面的内容后面,如下所示: [html] 复制代码 代码如下: <html> <head> <title>Example HTML Page</title> </head> <body> <!-- 这里放内容 --> <script type="text/javascript" src="example1.js"></script> <script type="text/javascript" src="example2.js"></script> </body> </html> <html> <head> <title>Example HTML Page</title> </head> <body> <!-- 这里放内容 --> <script type="text/javascript" src="example1.js"></script> <script type="text/javascript" src="example2.js"></script> </body> </html> 这样,在解析包含的JavaScript代码之前,页面的内容将完全呈现在浏览器中。而用户也会因为浏览器窗口显示空白页面的时间缩短而感到打开页面的速度加快了。 或者也可以使用<script>标签的defer属性表明脚本在执行时不会影响页面的构造,即脚本会被延迟到整个页面都解析完毕后再运行,代码如下: [html] 复制代码 代码如下: <html> <head> <title>Example HTML Page</title> <script type="text/javascript" defer="defer" src="example1.js"></script> <script type="text/javascript" defer="defer" src="example2.js"></script> </head> <body> <!-- 这里放内容 --> </body> </html> <html> <head> <title>Example HTML Page</title> <script type="text/javascript" defer="defer" src="example1.js"></script> <script type="text/javascript" defer="defer" src="example2.js"></script> </head> <body> <!-- 这里放内容 --> </body> </html> 上述两种写法的实际效果是一样的。但是,并非所有的浏览器都支持defer属性,有些浏览器会忽略这个属性,不延迟脚本的执行。

JQuery插件fancybox解决无法在弹出层使用左右键的问题。无法使用的原因在于,插件接管了左右键,用于多张图片的翻页。如果不需要这个功能,可以在fancybox插件中,禁止接管就好了。具体在插件下的js文件 jquery.fancybox-1.3.4.js 中的598行,注释掉就好了。

焦点访谈

最新最热的文章

更多 >

COPYRIGHT (©) 2017 Copyright ©2017 5060网址大全 网站地图

联系我们

827570882

扫描二维码分享到微信