js笔记1

作者: 刘叶青 | 来源:发表于2019-03-26 11:16 被阅读0次

以前总是鄙视技术理论,觉得只要能写代码就够了,没必要记住那些专业名词,现在才发现,专业名词有时也用得到,比如在自己总结某方面技术的时候就用得到,在交流技术实现时用得到

问:在IE里,怎么调起chrome浏览器打开指定网页?

答:

function start() {

    var objShell = new ActiveXObject("wscript.shell");

    var cmd = "cmd /c start chrome \"http://www.baidu.com\"";

    var f = objShell.Run(cmd, 0); //相当于现在windows下按了windows+r,写cmd,然后运行start chrome \"http://www.baidu.com\",如果要启动360浏览器,需要用户安装时按照默认路径来,然后把cmd /c start chrome \"http://www.baidu.com\""改成360chrome,如果需要打开火狐浏览器,就把上面这句var cmd = "cmd /c start chrome \"http://www.baidu.com\"";改成var cmd = "cmd /c start firefox \"http://www.baidu.com\"";

    objShell = null;

}

start();

问:for循环里,怎么禁止for循环以后的代码执行?

答:

以前,我会在for循环里让js报错,从而达到禁止for循环以后的代码执行,现在发现有1种更优雅的方式:

let schid = '';

        get_schid:

        for(let i = 0;i < doc_info.length;i++){

                break get_schid;

        }

        if(schid == ''){

alert();

return;

        }

如果列表没有数据,返回的数据用空字符串比空数组性能更好,所以,列表为空的时候让后端尽量给我空字符串

问:<input class="forbid_input" type="text" readonly="readonly">

IE浏览器,在input里按了backspace键,浏览器会跳到上一个页面,怎么办?

答:

<input type="text" readonly="readonly">

$("input[readonly]").keydown(function(e) {

        e.preventDefault();

    });

原文链接:https://blog.csdn.net/oatmeal2015/article/details/52846529?utm_source=blogxgwz3

今天遇到1个奇葩的问题,不知道怎么解决,然后一行一行删除js,结果就弄好了,以后遇到类似问题,也可以用这个方法(算是最后一根稻草了,哈哈)

问:IE9及其以下浏览器不支持placeholder,怎么办?

答:答案如下:

username_input是input的class名,这里的代码是针对input[type=text]的:

function isPlaceholderSupport() {

    return 'placeholder' in document.createElement('input');

}

if(!isPlaceholderSupport()){

    $('.username_input').val('请输入用户名');

    $('.username_input').on('focus', focus1);

    $('.username_input').on('blur', blur1);

    function focus1(){

        var x = $('.username_input').val();

        if(x == "请输入用户名"){

            $(".username_input").val("");

        }

    }

    function blur1(){

        var x = $('.username_input').val();

        if(x == ""){

            $(".username_input").val("请输入用户名");

        }

    }

}

如果是遇到input[type=password]时,上面的代码就不够了,如果遇到input[type=password],就写如下的代码:

<div class="support_placeholder">

    <input class="password_input" type="password" placeholder="请输入密码" />

</div>

<div class="no_support_placeholder">

    <input id="password2" onkeydown="enter(this.id);" class="denglu-input" type="text" name="password" onfocus="focus2()" value="请输入密码" style="display: block;"/>

    <input id="password" onkeydown="enter(this.id);"  class="denglu-input" type="password"  onblur="blur2()"  name="password"  value="" style="display: none;"/>

</div>

js:

function isPlaceholderSupport() {

    return 'placeholder' in document.createElement('input');

}

if(!isPlaceholderSupport()){

    $('.no_support_placeholder').show();

    $('.support_placeholder').hide();

}

else{

    $('.support_placeholder').show();

    $('.no_support_placeholder').hide();

}

function enter(name) {

    if (event.keyCode == 13){

        var display=$('#password2').css('display');

        var display1=$('#password').css('display');

        if(display1!='none'){

            $('#password')[0].focus();

        }else{

            $('#password2')[0].focus();

        }

    }

}

function focus2(){

    $("#password2").css({"display":"none"});

    $("#password").css({"display":"block"});

    $("#password").focus();

}

function blur2(){

    var x = $("#password").val();

    if(x==""){

        $("#password").css({"display":"none"});

        $("#password2").css({"display":"block"});

    }

}

问:遇到布局问题时,常见的解决办法有哪些?

答:1.增加或者减少DOM元素层数

2.换css属性

3.用js控制样式

问:如何能在setTimeout或setInterval里的函数设置参数?

答:

方案1:

var str = 'aaa';

var num = 2;

function auto(num){

    console.log(num);

}

setInterval('auto(num)',1000);

setTimeout('auto(num)',1);

方案2:

var num = 2;

function test(){

    var str = 'bbb';

    setTimeout(auto(str),1);

}

function auto(str){

    return function(){

        console.log(str);

    }

}

test();

问:js如何获得div去掉滚动条部分的宽度?(原文链接:https://zhidao.baidu.com/question/487606067.html)
答:clientWidth:获取对象的宽度,不计算任何边距、边框、滚动条或可能应用到该对象的补白。

我发现几年前用过的一些插件的网站关门了,以后遇到好的插件,要把插件的源码、文档上传到自己的百度网盘上,如果真的很重要,在有道云笔记也备份一下,这样,即使百度倒闭了,有道云笔记没倒闭,还可以在有道云笔记上面找到自己想要的东西,要有‘防患于未然’的安全意识

问:table里,怎么给动态生成的奇数行tr设置背景颜色(需要兼容ie8)?问:网页中怎么预览word文档?问:chrome浏览器怎么调用IE?

答:
方案1:当每次创建完新的<tr>以后,再调用

$('.table1').find('tr:odd').css({

        background : '#f00'

    });
方案2:
思想与方案1类似,但是效率会高一点:
生成<tr>以后,如果是奇数行,就加上odd这个class,然后在css里给.odd加样式,这个方法更方便,效率更高

答:<iframe src='https://view.officeapps.live.com/op/view.aspx?src=http://storage.xuetangx.com/public_assets/xuetangx/PDF/1.xls' width='100%' height='100%' frameborder='1'> </iframe>

其中,src后面的是自己的线上word文档地址,必须是线上的

答:open('microsoft-edge://www.baidu.com')

问:chrome浏览器怎么调用edge?

答:open('RES://www.baidu.com');

chrome浏览器URL注册调用本地应用程序:https://www.cnblogs.com/glorysword/archive/2012/08/07/2626008.html?tdsourcetag=s_pcqq_aiomsg

问:怎么让dom元素滚动到某个位置?

答:dom.scrollTo(0,100);

问:window窗口怎么滚动到某个位置?

答:scrollTo(0,100);

当面对新技术时,我们要把新技术和旧技术进行对比,找出两者的相同点、不同点、优势、劣势,其中,我们要学习的是两者的相同点和优点,因为相同点和优点往往是精华

我最近发现,如果在学习过程中遇到困惑时,就抱着问其他人问题的心态,去想办法让对方理解自己的困惑时,往往一些问题就竟然解决了

复习js的时候,重点学习哪些东西?

记忆属性是用来做什么的,而不要去记忆那些完整的东西,不要指望自己把js的大部分属性记住,只要用到的时候知道大概去哪里找答案就行了,或者知道大概怎么去百度就行了

当删除某个dom元素会影响到布局时,为了快,可以把这个dom元素的宽高设置为0,这样,如果之前写的代码灵活性比较好,根据dom元素的宽高而设置其他dom元素的宽高的话,就不会影响到布局了

问:如果电脑开启了tomcat,用192.168.0.184的形式访问,电脑能访问但是手机不能访问,出现这个现象的可能的原因有哪些?

答:电脑开启了防火墙

答:这个在新版chrome浏览器里是做不到的,只能把当前页面变成空白页面,代码如下:

window.open("about:blank","_self");

window.close();

问:table的父元素width是200px,table设置width='100%',但是table的宽度大于父元素宽度(也就是table宽度大于200px),出现这个现象可能的原因有哪些?问:页面a和页面b都有可能跳到页面c,并且跳到页面c以后还要跳回去,怎么实现?问:项目需求频繁更改,程序员该怎么适应?问:如何判断用户登录的是否是xx浏览器?

答:table里某个tr的内容太多了,宽度必须超过200px的时候,table的宽度就大于200px了

答:

方案1:

页面a跳到页面c的时候写location.href='c?page=a',页面b跳到页面c的时候写location.href='c?page=b',这样,页面c可以根据查询字符串的值,跳回页面a或页面b

方案2:

这个方案更好,就是在页面c写location.href = document.referrer;

方案3:

这个方案最差,就是在页面a跳到页面c的时候,跳转页面前设置localstorage的page=a,页面b跳到页面c的时候,跳转页面前设置localstorage的page=b,在页面c里就知道是从哪个页面跳转过来的

方案4:

在页面c使用history.back(),这个方案的优势是,可以往前跳2层页面

答:

程序架构保留一定的灵活度,代码灵活性要好

代码要有可维护性、可扩展性

代码质量好,代码格式规范,有必要的注释,有良好的可读性、复用性

能用简单的办法实现,就尽量用简单的方法

答:判断用户登录的是不是某个浏览器,一般找到这个浏览器的UA,根据浏览器的UA是否有某个特殊值,来判断这个浏览器是不是某个浏览器

左滑删除功能,以前网上找了很多插件,没有一个好用,自己用jquery做了一下,比网上的插件都好用,思想如下,具体代码在百度网盘上:

获取鼠标按下、松开的位置,如果是从右往左的话,就显示右侧的删除按钮(按钮设置了position:absolute;right:按钮宽度的负值;显示按钮其实就是把right的值设置成0;),显示的时候加上过渡效果,反之,就隐藏右侧的按钮,就这么简单,自己都不敢相信,哈哈

从页面a跳到页面b,再跳回页面a,不要写location.href='页面a的路径',要写history.back();因为history.back();灵活性更好

问:input输入到右边框的时候禁止输入,怎么实现?(这是一个不正常的需求,但是从技术角度可以基本实现)

答:

思路:获取不到input,就搞个span标签来,这样大致可以获取用户输入内容的宽度了

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>测试</title>

    <style>

        *{

            padding: 0;

            margin: 0;

        }

        input, span{

            border:none;

            padding: 0;

            margin: 0;

            font-size: 16px;

        }

    </style>

</head>

<body>

<input type="text" value="">

<div>

    <span></span>

</div>

<script src="js/jquery.js"></script>

<script>

    var input_w = $('input').width();

    $('input').keyup(function () {

        if($('span').width() >= input_w){

            $(this).prop('readonly', 'readonly');

            return false;

        }

        $('span').html($(this).val());

    });

</script>

</body>

</html>

答:https://www.babeljs.cn/repl/,用babel让es6的语法转成es5的

如果要全局替换某些代码,记得不要给插件的代码全局替换掉,否则可能会出现问题

今天一个网友跟我说到了一个情况:chrome可以请求,但是ie浏览器走的是error的回调函数,百度了很久,尝试了很多方法,都没成功,结果我把$.ajax改成原生js的请求,ie浏览器报错:‘拒绝访问。’我把请求改成jsonp,ie浏览器就能发送请求了,只是返回的数据格式不正确,但是离解决问题更近了一步,所以,遇到问题时,如果是用框架写的,改成原生js的写法,可以获得更多的报错信息

问:jsonp是什么?
答:jsonp请求demo:

html:

<script>

    function doSomething(jsondata) {

        console.log('jsondata', jsondata);

    }

</script>

<script src="http://localhost/test/test1.php?callback=doSomething"></script>

php:

<?php

header('Access-Control-Allow-Origin: *');

header('Access-Control-Allow-Headers: UAPPID,UCHECK,UTOKEN,UTIME,Content-Type,Access-Token');

header("content-type:text/html;charset=utf-8");

$callback = $_GET['callback'];

$data = array('a', 'b');

echo $callback.'('.json_encode($data).')';

问:闭包的原理是什么?

答:内存一直没有释放,变量一直在堆内存里

以前在一家公司,面试官问我‘闭包的原理是什么?’,当时我说了我的理解以后,面试官说‘你只是说了一下实现方式,没有说原理’,当时我回去百度了,结果没百度到,也没问其他人,结果今天又在这个问题上跌倒了一次,以后要牢记这个问题,不能在这个问题上跌倒第3次

问:怎么证明浏览器请求html没有缓存、而请求引入的css和js文件有缓存?

答:

问:今天遇到1个问题,我把ie浏览器的脚本禁用了,广告全部消失了,图片也加载不出来了,这是正常的,但是我点击百度的‘百度一下’按钮,结果,去发送请求了,这是为什么呢?正常逻辑应该是给按钮绑定一个点击事件,如果我禁用js了,就不会发送请求呀

答:打开控制台发现这里是一个<input type="submit" id="su" value="百度一下" class="bg s_btn btnhover">,form 有 规范的,第一个 input button type 是 submit 默认触发 submit 事件。

问:如何判断2个数组是否相等?

答:下面的代码是我自己写的,如果数组里面还嵌套着数组,我的代码就失效了,实际项目中,如果需要判断2个数组是否相等,就去百度一下:

方法1(只能判断一维数组):

遍历属性名和属性值是否相等

    let arr1 = [11, {name : 1}];

    let arr2 = [11, {name : 13}];

    let flag = true;

    // 如果数组里都是基本类型,就调用compare1,如果都是对象,调用compare2

    if(arr1.length != arr2.length){

        flag = false;

    }

    for(let i = 0;i < arr1.length;i++){ //遍历arr1

        if(typeof arr1[i] != 'object' && typeof arr1[i] != 'function'){

            //如果arr[i]是基本类型,判断arr2里是否有这个值

            //判断arr2里是否有arr1[i]的值

            if(arr2.indexOf(arr1[i], 0) == -1){

                flag = false;

            }

        }

        else{

            let arr1_i_key = Object.keys(arr1[i])[0];    //获取arr1的第i项的属性名、属性值

            for(let j = 0;j < arr2.length;j++){ //遍历arr2

                if(typeof arr2[j] == 'object' || typeof arr2[j] == 'function'){

                    let arr2_j_key = Object.keys(arr2[j])[0];    //获取arr2的第i项的属性名、属性值

                    if((arr1_i_key == arr2_j_key) && (arr1[i][arr1_i_key] == arr2[j][arr2_j_key])){

                    }

                    else{

                        flag = false;

                    }

                }

            }

        }

    }

    console.log('flag', flag);

方法2(只能判断一维数组):

let arr1 = [1, 2, [2, 1]];

    let arr2 = [2, 1, [1, 2]];

    arr1 = arr1.sort();

    arr2 = arr2.sort();

    console.log(JSON.stringify(arr1) == JSON.stringify(arr2));

问:今天复习jsonp的时候,我觉得好奇怪,定义f()的<script>标签放在前面的话,就能调用f这个函数;如果把定义f()的<script>标签放在后面的话,就报错了,其中的原理是怎么样的?

答:https://segmentfault.com/q/1010000002895851

相关文章

  • 《JS设计模式》读书笔记(一)

    标签:JS 设计模式 《JS设计模式》读书笔记(二) 《JS设计模式》读书笔记(三) 《JS设计模式》读书笔记(四...

  • 《JS设计模式》读书笔记(六)

    标签:JS 设计模式 读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(二) 《JS设计模...

  • 《JS设计模式》读书笔记(七-完结)

    标签:JS 设计模式 其他读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(二) 《JS设...

  • 《JS设计模式》读书笔记(二)

    标签:JS 设计模式 读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(三) 《JS设计模...

  • 《JS设计模式》读书笔记(三)

    标签:JS 设计模式 读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(二) 《JS设计模...

  • 《JS设计模式》读书笔记(四)

    标签:JS 设计模式 读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(二) 《JS设计模...

  • 《JS设计模式》读书笔记(五)

    标签:JS 设计模式 读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(二) 《JS设计模...

  • 实习第七十四天(设计模式)

    参考 《JS设计模式》读书笔记(二) 《JS设计模式》读书笔记(三) 《JS设计模式》读书笔记(四) 《JS设计模...

  • JavaScript笔记

    js笔记 一、js简介1、js是什么2、js作用3、组成4、引入方式二、基本语法1、变量2、原始数据类型3、引入数...

  • JS笔记

    JS笔记 js顺序 1,获取标签,元素 2,确定事件 3,具体操作 1, onmouseover="wenzi.s...

网友评论

      本文标题:js笔记1

      本文链接:https://www.haomeiwen.com/subject/jmfgvqtx.html