JS笔记汇总2

笔记零零散散的记在各地方,再来一发。
还是那句话,到处收集的,非原创。

链接跳转

判断PC和iphone 并用根据浏览器语言跳转页面

var lang=navigator.userLanguage||navigator.language;
var $C=location.hash;
if (navigator.platform.indexOf('iPhone') != - 1 && $C!="#pc"){
    mobile_browse_lang();
}else{
    pc_browse_lang();
}
function pc_browse_lang(){
    var type=navigator.appName;
    if (type=="Netscape"){
        var lang = navigator.language;
    }
    else{
        var lang = navigator.userLanguage;
    }
    var lang = lang.substr(0,2);

    var lang_key = ['key1', 'key2', 'key3', 'key4', 'key5'];//浏览器语言代码,若浏览器语言为英语,则对应为'en';
    // var lang_type = $.inArray(lang, lang_key); jquery写法


    function indexOf(lang_key, lang) {
      for (var i = 0; i < lang_key.length; i++) {
        if (lang_key[i] === lang)
          return i;
      }
      return -1;
    }

    var lang_type = indexOf(lang_key, lang);


    if(lang_type == -1){
        window.location.href = 'xxx_key0.html';//若不在  lang_key 数组里面 则默认为 key0
    } else {
        window.location.href = 'xxx_'+ lang +'.html';
    }

}

响应式相关

用js进行获取窗口宽度,进行对应处理

//牛逼版
if(window.matchMedia){
    var mq = window.matchMedia("(min-width: 500px)");   
    mq.addListener(WidthChange);   
    WidthChange(mq); 
}   

function WidthChange(mq){
            if(mq.matches){

            //此时window的宽度大于500px

        }else{

            //此时window的宽度小于500px

        }  
}

//正常版
var resizeMethod = function(){
    if (document.body.clientWidth < 768) {
        console.log('mobile');
    }
};

//绑定事件处理函数到resize事件
window.addEventListener("resize", resizeMethod, true);  

安卓手机分辨率判断计算

(自己算的 用于pc端和手机端是同一个页面的情况 等比缩放 这个大家随便看看 因为我也已经看不懂了 啊啊啊 当时的页面找不到了 oh no)

var body = document.querySelector('body');
var w = screen.width;//屏幕宽度
var h = screen.height;//屏幕高度
var rat = window.devicePixelRatio;//设备像素比  
var s_w; 
var c_w = document.documentElement.clientWidth;//可见区域宽度
var c_h = document.documentElement.clientHeight;//可见区域高度
if(w == c_w){//认为是pc端
    rat = 1;
}
//取到宽度(即取到较小的一个边的宽度)
if( w > h){//横屏
    s_w = h; 
}else{
    s_w = w;
}   
caculate();         
function caculate(){
    var wrap_w;
    if(c_w < c_h){
        wrap_w = c_w;
    }else{
        wrap_w = s_w/rat;
    }
    if(wrap_w > 960){
        wrap_w =960;
    }
    var fs = parseInt(wrap_w/9.6);
    body.style.fontSize = fs+'px';

}

数组相关

查找数组符合项

//jQuery
$.inArray(item, array);                   
//ie8+
function indexOf(array, item) {
  for (var i = 0; i < array.length; i++) {
    if (array[i] === item)
      return i;
  }
  return -1;
}
indexOf(array, item);               
//ie9+
array.indexOf(item);

循环监听

var mydivs = document.getElementById("box").getElementsByTagName("div");
for(var i = 0;i<=mydivs.length;i++){
    mydivs[i].no = i;
    mydivs[i].onclick = function(){
        console.log('我是第' + this.no + '个');
}

事件类

事件委托

(function(){
    var resources = document.getElementById('resources');
    resources.addEventListener('click',handler,false);
    function handler(e){
        var x = e.target; // get the link tha
        if(x.nodeName.toLowerCase() === 'a'){
            alert('Event delegation:' + x);
            e.preventDefault();
        }
    };
})();

模块化

匿名函数和模块化

//方法一
var myApplication = function(){
    var name = 'Chris';
    var age = '34';
    var status = 'single';
    function createMember(){
        // [...]
    }
    function getMemberDetails(){
        // [...]
    }
    return{
        create:createMember,
        get:getMemberDetails
    }
}();
//现在写成 myApplication.get()和 
//myApplication.create() 就行了。

//方法二
var module1 = (function(){
    var _count = 0;
    var m1 = function(){
    //...
    };
    var m2 = function(){
        //...
    };
    return {
        m1 : m1,
        m2 : m2
    };
})();

js对象字面量

var literal = {
    add: function(){
        alert("add");
    },
    del: function(){
        alert("delete");
    },
    update: function(){
        alert("update");
    },
    name: "zhangsan",
    callLiteral: function(){
        // 对于当前字面量对象的调用,要加this关键字
        this.add();
    }
};

//拿js对象字面量可以用 for(变量 in 对象) 
<div id="demo">
     
</div>
<p>
    <script type="text/javascript">
        var mycars ={a:"a1",b:"b1",c:"c1",d:"d1"};
        var str='{a:"a1",b:"b1",c:"c1",d:"d1"}';
        var temp="";
        for (x in mycars)
        {
            temp+="数组索引或对象属性:"+x+" 对应的值:"+mycars[x]+"<br/>";
        }
        document.getElementById("demo").innerHTML=str+"<br/>"+temp;
    </script>
</p>

class相关

原生js class增删

<style type="text/css">
    div.testClass{
        background-color:gray;
    }
</style>
<script type="text/javascript">
    function hasClass(obj, cls) {
        return obj.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
    }

    function addClass(obj, cls) {
        if (!this.hasClass(obj, cls)) obj.className += " " + cls;
    }

    function removeClass(obj, cls) {
        if (hasClass(obj, cls)) {
            var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
            obj.className = obj.className.replace(reg, ' ');
        }
    }

    function toggleClass(obj,cls){
        if(hasClass(obj,cls)){
            removeClass(obj, cls);
        }else{
            addClass(obj, cls);
        }
    }

    function toggleClassTest(){
        var obj = document. getElementById('test');
        toggleClass(obj,"testClass");
    }
</script>
<body>
    <div id = "test" style = "width:250px;height:100px;">
        sssssssssssss
    </div>
    <input type = "button" value = "toggleClassTest" onclick = "toggleClassTest();" />
</body>

css相关

获取css样式

出处:http://www.csshello.com/jcjs/352.html
样式呢,如果直接写在行内,也就是内联样式,js能直接获取到。如果写在非行内,改怎么获取呢?
顺便科普下,总共有三种分类:内联样式(Inline Style)、内部样式表(Internal Style Sheet)和外部样式表(External Style Sheet)。
直接上代码:

  • div1为行内样式
  • div2为非行内样式
    css部分
    #div2{width:200px; height:200px; background:red;}
    html部分
    <div id='div1' style='width:200px; height:200px; background:red;'></div>
    <div id='div2'></div>
    js部分
    window.onload=function(){
    var odiv1=document.getElementById('div1');
    var odiv2=document.getElementById('div2');
    //由于ie不支持console.log(),故测试ie时,请使用alert()
    console.log('行内样式获取'+odiv1.style.width);
    console.log('非行内样式获取'+odiv2.style.width);
    console.log('非行内样式获取通过函数'+getStyle(odiv2,'width'));
    }
    function getStyle(obj,name){
    if(obj.currentStyle){
    //IE
    return obj.currentStyle[name];
    }else{
    //FF、Chrome
    return getComputedStyle(obj,false)[name];
    }
    };

收工!
这个既然是2, 那1就在这里js笔记

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

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,737评论 1 92
  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 7,117评论 2 19
  • JavaScript 将字符串转换为数字 parseInt() ◆只保留数字的整数部分,不会进行四舍五入运算。 ...
    AkaTBS阅读 980评论 0 9
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,727评论 2 17
  • 编辑|小韵 鬼谷子--谋圣、纵横家之鼻祖 鬼谷子,人如其名,颇具传奇与神秘色彩。五行阴阳开天地,纵横捭阖定生息。诸...
    国粹古韵阅读 1,006评论 1 11