【死记硬背】javascript常用代码或注意事项
★ 页面跳转
window.location.href='main.html'
页面跳转
★ 三目运算
x?y:z三目运算
x是一个boolean类型,若x为true,结果显示y,若x为false,则结果显示z.
var _this = ¥(this);
$(this).find('.a').click(function(){
$(this).find().....//代表.a
_this.find()………………//需要父类的时候
});
★ javascript中new Date方法
new Date(2016, 0, 25);
是2016.1.25
js中月是0-11
★ 判断是否手机访问,自动跳转移动端
var is_mobile=function (){ var arrs=['iphone','android']; var info=navigator.userAgent.toLowerCase(); for(var i=0; i<arrs.length; i++){ var result=info.indexOf(arrs[i]); if(result > -1){ return true; } } return false; } if(is_mobile()){ window.location.href="http://wap.miit.gov.cn"; }
★ 网页上弹出新(浏览器)窗口,要求新窗口水平垂直居中
function openWin(qq,sitename) { //转向网页的地址; var url='http://wpa.qq.com/msgrd?v=3&uin='+qq+'&site=qq&menu=yes'; //网页名称,可为空; var name=sitename; //弹出窗口的宽度; var iWidth=720; //弹出窗口的高度; var iHeight=600; //获得窗口的垂直位置 var iTop = (window.screen.availHeight - 30 - iHeight) / 2; //获得窗口的水平位置 var iLeft = (window.screen.availWidth - 10 - iWidth) / 2; window.open(url, name, 'height=' + iHeight + ',,innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft + ',status=no,toolbar=no,menubar=no,location=no,resizable=no,scrollbars=0,titlebar=no'); }
★ 关于ajax,js原生方法和jquery方法,要求背诵
★ 关于添加事件监听器,js原生和jquery方法,要求背诵
★ bootstrap url tab
解决Twitter Bootstrap Tab URL链接问题
/** * Javascript to enable link to tab * 1、检测URL,实现通过URL传参(?id=item1)或(?id=item1#item2?nojump),自动打开指定标签页 * 2、切换标签页后,修改页面hash(#id?nojump),实现刷新页面仍留在原标签页上 */ $(document).ready(function(){ //得到页面url var url = document.location.toString(); var xhtab = $("#xhTab"); var newTabObj; //截取字符串,打开相应标签 if (url.indexOf("?nojump")>0) { newTabObj = xhtab.find('a[href="'+'#'+url.split('#')[1].split('?nojump')[0]+'"]').tab('show'); }else if (url.indexOf("?id=")>0) { newTabObj = xhtab.find('a[href="'+'#'+url.split('?id=')[1]+'"]').tab('show'); } } xhtab.find('a[data-toggle="tab"]').on("shown.bs.tab", function (e) { // 修改页面hash,以便刷新页面仍保留在当前标签页 window.location.hash = e.target.hash+"?nojump"; }); });
★ javascript事件委托和jQuery事件绑定on、off 和one
需背诵
简要总结
$(XXX).bind("click",function(){}); 不能动态绑定(无法绑定至尚未加载的dom上),解绑使用.unbind("click")
动态绑定
了解即可
.live() 解绑使用 .die() 该方法在jquery 1.3 之后添加,1.7之后废弃,1.9之后删除
.delegate()和undelegate()在jquery 1.7之后被on方法整合替代了
需要记住
jquery 1.7以后推出的,on(),off(),one()
★关于Jquery的parent和parents
parent是指取得一个包含着所有匹配元素的唯一父元素的元素集合。
parents则是取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素)。可以通过一个可选的表达式进行筛选。
可以看出parent取的很明确,就是当前元素的父元素;parents则是当前元素的祖先元素。下面列出例子说明:
<div id='div1'>
<div id='div2'><p></p></div>
<div id='div3' class='a'><p></p></div>
<div id='div4'><p></p></div>
</div>
$('p').parent()取到的是div2,div3,div4
$('p').parent('.a')取到的是div3
$('p').parent().parent()取到的是div1,这点比较奇特;不过Jquery对象本身的特点决定了这是可行的。
$('p').parents()取到的是div1,div2,div3,div4
$('p').parents('.a')取到的是div3
★屏蔽href跳转
应用场景:
使用锚链接跳转到指定区域:<a href="#artical">跳转到文章</a>
这时候需要js接入添加事件,但是不想浏览器URL中出现http://www.****.com#artical(某些特殊需求下不允许出现)
需要在该a标签绑定的事件的最后添加 return false;
如果 href中有链接,但是不想跳转的话也可以这样。
★浏览器判断
jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。
在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合使用 jQuery 1.9 和 2.0, 官方的解决方案是:
<!--[if lt IE 9]>
<script src='jquery-1.9.0.js'></script>
<![endif]-->
<!--[if gte IE 9]>
<script src='jquery-2.0.0.js'></script>
<![endif]-->
从长久来看,这样有利于在复杂情况下根据浏览器特性进行分别处理, 而不是简单的检测浏览器类型和版本。 但目前很多旧程序的移植恐怕无法直接过渡为根据浏览器支持特性, 所以在网上找了一些能够直接替换的解决办法。
判断浏览器类型:
$.browser.mozilla = /firefox/.test(navigator.userAgent.toLowerCase()); $.browser.webkit = /webkit/.test(navigator.userAgent.toLowerCase()); $.browser.opera = /opera/.test(navigator.userAgent.toLowerCase()); $.browser.msie = /msie/.test(navigator.userAgent.toLowerCase());
等号后面的表达式返回的就是 true/false, 可以直接用来替换原来的 $.browser.msie 等。
如需要检查是否为 IE6时,可以这么写:
// Old if ($.browser.msie && 7 > $.browser.version) {} // New if ('undefined' == typeof(document.body.style.maxHeight)) {}
检查是否为 IE 6-8:
if (!$.support.leadingWhitespace) {}
下面 我们采取的思路是 使用jquery的继承机制 对jquery 1.11.1版本 进行扩展 使其支持 $.browser 方法,已达到兼容之前组件的目的。
jQuery.extend({ browser: function() { var rwebkit = /(webkit)\/([\w.]+)/, ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, rmsie = /(msie) ([\w.]+)/, rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, browser = {}, ua = window.navigator.userAgent, browserMatch = uaMatch(ua); if (browserMatch.browser) { browser[browserMatch.browser] = true; browser.version = browserMatch.version; } return { browser: browser }; }, }); function uaMatch(ua) { ua = ua.toLowerCase(); var match = rwebkit.exec(ua) || ropera.exec(ua) || rmsie.exec(ua) || ua.indexOf("compatible") < 0 && rmozilla.exec(ua) || []; return { browser : match[1] || "", version : match[2] || "0" }; }
参考链接:
http://www.jb51.net/article/50463.htm
http://blog.csdn.net/loehuang/article/details/32347857
===============上面说的几个兼容的方法(都是百度搜来的)貌似都有问题,实测不行,有可能是调用不对???
我从jquery1.8.3中找到了相应的代码,然后单独建立js文件,放到jquery1.9.0以上版本文件后面引用,测试发现可以使用。
(function() { var matched, browser; // Use of jQuery.browser is frowned upon. // More details: http://api.jquery.com/jQuery.browser // jQuery.uaMatch maintained for back-compat jQuery.uaMatch = function( ua ) { ua = ua.toLowerCase(); var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || /(webkit)[ \/]([\w.]+)/.exec( ua ) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || /(msie) ([\w.]+)/.exec( ua ) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || []; return { browser: match[ 1 ] || "", version: match[ 2 ] || "0" }; }; matched = jQuery.uaMatch( navigator.userAgent ); browser = {}; if ( matched.browser ) { browser[ matched.browser ] = true; browser.version = matched.version; } // Chrome is Webkit, but Webkit is also Safari. if ( browser.chrome ) { browser.webkit = true; } else if ( browser.webkit ) { browser.safari = true; } jQuery.browser = browser; jQuery.sub = function() { function jQuerySub( selector, context ) { return new jQuerySub.fn.init( selector, context ); } jQuery.extend( true, jQuerySub, this ); jQuerySub.superclass = this; jQuerySub.fn = jQuerySub.prototype = this(); jQuerySub.fn.constructor = jQuerySub; jQuerySub.sub = this.sub; jQuerySub.fn.init = function init( selector, context ) { if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { context = jQuerySub( context ); } return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); }; jQuerySub.fn.init.prototype = jQuerySub.fn; var rootjQuerySub = jQuerySub(document); return jQuerySub; }; })();
遇到这个问题的时候,有用到一个插件,那个插件用了上面的方法,导致插件依赖jquery1.8版本,不能更新,后来作者更新了插件,解决了这个问题。
回忆一个这是哪个插件,然后又是怎么解决的
★json
1、拼接成json字符串,只要用遍历耐心拼就好,没什么难点
2、json字符串转为json。
$(function(){ //测试 结果不是倒的啊,为什么上面那个json对象中的属性倒置了? //结果 woc,这货是按字母顺序排序的。 var jsonA = []; var json1 = '{"b":"1","a":"2"}'; var json2 = '{"b":"2","a":"4"}'; var json3 = '{"c":"2","d":"4"}'; console.log(json1); console.log(json2); jsonA.push($.parseJSON(json1)); //jquery提供的方法 jsonA.push(JSON.parse(json2)); //浏览器提供的方法,ie9一下可能不兼容 jsonA.push(eval("(" + json3 + ")")); //eval方法 console.log(jsonA); alert(JSON.stringify(jsonA)); });
★ js中写一个function,默认是绑定到window对象上的
比如
function f() { return '姓名:'+ this.name; }
var name = "ceshi"
f();//"姓名:window"
因为,
上面等同于
window.f = function(){ return '姓名:'+this.name }
window.name = "ceshi"
出处:js中的this关键字 http://javascript.ruanyifeng.com/oop/this.html
★弹出浏览器小窗口(没有收藏栏标签栏状态栏)
window.open('https://www.baidu.com','addFileWindow','toolbar=no,location=no,resizable=no, height=500, width=300,,scrollbars=no ,left=950,top=100');
适合聊天客服或音乐播放器类页面使用