您的位置:首页 > Web前端 > JavaScript

日常知识记录(更新中)

2018-02-07 15:57 232 查看

1. 为什么用element.style 获取样式表的某个属性时获取不到?

element.style返回的是一个cssStyleDeclaration对象,只能操作内嵌样式,对除此以外的样式应用表的属性都会忽略。比如,element.style.background= ‘red’,实际操作后的后果是直接给元素添加了内嵌样式 。由此,引申出下一个问题的思考。

2. 如何获取样式表的属性值

css样式大致分为三种:

内嵌样式:写在tag里面,只对当前tag生效,对其他都无效

内部样式:写在html里面,一般是head中的style里,对当前所在网页有效

外部样式:如果样式表过于复杂,也可能会抽出来写到一个通用的以’.css’后缀结尾的文件中,再引用到页面中来。

基于前面实现可知,element.style只能用来获取和操作内嵌样式,那么考虑非内嵌样式的获取,查阅资料后发现:

window.getComputedStyle 可以用来操作非IE的非内嵌样式。

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

element.currentStyle 可以用来操作IE的非内嵌样式

综合考虑,如何用js来获取css样式,如果明确样式是非内嵌样式:

(ele.currentStyle?ele.currentStyle:window.getComputedStyle(ele,'伪类(没有写null)')).attr
(考虑IE兼容性)

3. 异步请求回调中新开窗口被浏览器视为广告而拦截

这个问题我也参考了网上很多的解决方案,最终比较有效的是,在发生请求前先打开一个空标签,这样,浏览器会认为这个行为是用户的点击触发的。等到接收到具体的数据以后,再把新开的空标签的地址重定向为获取到的地址。如果出错,则再把空标签关闭。

function click(){
var w = window.open('','_blank');//先打开临时窗体,由于是点击事件内触发,不会被拦截
$.ajax({
url:'...',
....
success: function (data) {
w.location.href= data.url; //当回调的时候更改临时窗体的路径
},
error:function(){
w.close(); //回调发现无需打开窗体时可以关闭之前的临时窗体
}
});
}


4. 重定向后dom数据获取问题

这个问题是发生在,前端向后端发起请求之后,后端把接口进行了重定向,之后获取到的数据可以在页面上正常的渲染展示。但是,当取dom元素希望获取该数据时,缺发现无法获取实际重定向之后获取的数据。我个人知识浅薄,目前不知道怎么解决,还请知道的大佬,可以给我点明一下~先提前THX~


5. js 实现记住密码

js 实现记住密码,就是利用cookie来进行信息存储。鉴于现在对这个实现的代码网上很多,我就不贴了,记录一下自己碰到的几个问题:

document.cookie = ‘xxxx’设置失效?

chrome处于安全性考虑不能设置本地cookie,网页文件需要在服务器环境下执行,必须将html文件放置在服务器目录,如tomcat下, 然后启动服务器再打开浏览器地址栏再访问。

注意失效时间(expires=xxx),如果失效时间设置成当前时间点那么document.cookie=”xxxx”的设置也是失效的

expires 如果不设置的话,关闭浏览器,cookies就失效,所以expires应该和cookie同时写入:

document.cookie = type + ‘=’ + escape(name) + ‘; expires=’ + date.toGMTString();

document.cookie = type + ‘=’ + escape(name) + ‘; expires=’ + date.toGMTString();

为什么一定要用eascape()?

因为cookie限制‘只能用在url中编码的字符串’,所以用escape吧字符串按url方法来编码,取值的时候用unescape()来解码。

日期 toCMTSting()?

日期的失效时间都是用格林威治时间格式,其他格式都没用。所以最后要转化

expires 是不可读的,所以当你用document.cookie取expires时是取不到的,浏览器会自己判断cookie里面的内容有没有过期,一般取得出来的都是未过期的内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  css js html