CSS、JavaScript 初心
目录
CSS篇
- 引用外部样式表的方式
- 选择器
- 选择器类型
- 群选择器(,)、通用选择器(*)
 
- 伪类和伪元素
- 页面的逻辑分区 -> div span
JavaScript篇
- 面对对象编程
- 特殊函数和对象
- AJAX 异步的JavaScript和XML
- 跨域请求
CSS篇
引用外部样式表的方式
- 
使用HTML链接样式表 <link rel="stylesheet" href="uri_of_css">
- 
使用CSS链接样式表 <style> @import uri("uri_of_css") </style>
<style>
    @import uri("uri_of_css")
</style>
选择器
- 选择器类型
1. 标签选择器        整体控制    *{}
2. 类选择器        精准控制    *.class{}
3. ID选择器        更精准的控制    *#id{}
4. 派生选择器        根据HTML的DOM树族谱关系选择对象
5. 伪选择器        选择伪类和伪元素
- 
群选择器(,)、通用选择器() 
 群选择器,在选择一堆具有公共css样式属性的不同对象时,用逗号隔开即可
 通用选择器如其名,选择所有对象,事实上,.class{}等价于.class{}
- 
DOM 
 祖先标签/派生标签、父标签/子标签、同胞标签
伪类和伪元素
页面的逻辑分区 -> div span
div, 即division,和span一样,它们将页面切割成一个个逻辑分区,不过div的display方式是block,span的display方式是inline
JavaScript篇
面对对象
- 什么是对象
每个对象都具有一系列属性, 还具有特定的可以执行的操作
从而 field method 构成了对象
- 三种方式构建对象
    // json -> 适合创建单个对象的场景
    var user = {
        name: "Unknown",
        age: 0,
        show: function () {
            log(`姓名: ${ this.name }, 年龄: ${ this.age }`)
        }
    }
    // 工厂方法
    function getUser(name, age) {
        var user = {
            name: name,
            age: age,
            show: function () {
                log(`姓名: ${ this.name }, 年龄: ${ this.age }`)
            }
        }
        return user
    }
    // 构造函数, 构造函数能在lambda表达式中使用this关键字, 同时能捕获构造时的形参, 强烈推荐
    // 调用构造函数必须使用 new 关键字
    function User(name, age) {
        this.name = name
        this.age = age
        this.show = fun => {
            log(`姓名: ${ this.name }, 年龄: ${ this.age }`)
        }
    }
特殊函数和对象
- 
eval() 和 Function 
- 
简单实现jQuery中的ready()函数 
 有时我们需要在head中进行DOM操作,而此时DOM文档并未加载,所以找不到标签导致报错,这时就需要注册window.onload监听事件,把DOM操作放在事件中
 模拟一下$库
var $ = window.$ || {
    inited: false,
    /** 打印日志 */
    log: function (any) {
        console.log(any)
        this.ready(function () {
            var divLog = document.getElementById("log");
            if (divLog !== null) divLog.innerHTML += any + "<hr>"
        })
    },
    init: function () {
        thiz = this
        this.ready(function () {
            // 设置inited字段
            thiz.inited = true
            // 设置viewport
            document.head.innerHTML += '<meta content="width=device-width,initial-scale=1.0" name="viewport">'
        })
        return true
    },
    ready: function (lambda) {
        if (this.inited) {
            return lambda()
        }
        window.addEventListener("load", lambda)
    },
    setTitle: function (title) {
        const nodeTitles = document.querySelectorAll("html head title")
        nodeTitles.forEach(
            function (e) {
                document.head.removeChild(e)
            }
        )
        const nodeTitle = document.createElement("title")
        nodeTitle.innerText = title
        document.head.appendChild(nodeTitle)
    },
}
if (!$.init()) {
    alert("warning: init $ failed!")
}
AJAX 异步的JavaScript和XML
- xhr: XMLHttpRequest
 AJAX主要通过XMLHttpRequest对象完成,一个简单的AJAX请求如下:
        function ls() {
            var xhr = new XMLHttpRequest();
            console.log(`${xhr.readyState} -> UNSET 对象创建完成`);
            xhr.open(method = "GET", url = "http://baidu.com:8888");
            xhr.timeout = 2000
            xhr.ontimeout = event => {
                console.log("timeout")
            }
            console.log(`${xhr.readyState} -> OPENED 已设置open目标`);
            xhr.addEventListener(
                "readystatechange", event => {
                    switch (event.target.readyState) {
                        case 2:
                            console.log(`${xhr.readyState} -> HEADERS_RECEIVED 已调用send方法`);
                            break;
                        case 3:
                            console.log(`${xhr.readyState} -> LOADING 接收response中`)
                            break;
                        case 4:
                            console.log(`${xhr.readyState} -> DONE response接收完毕`);
                            break;
                        default:
                            console.log("Unknown state")
                    }
                }
            )
            xhr.send();
        }
请求超时:
0 -> UNSET 对象创建完成
1 -> OPENED 已设置open目标
4 -> DONE response接收完毕
timeout
请求完成:
0 -> UNSET 对象创建完成
1 -> OPENED 已设置open目标
2 -> HEADERS_RECEIVED 已调用send方法
3 -> LOADING 接收response中
4 -> DONE response接收完毕
跨域请求
- 访问控制允许来源
可变参数 arguments
JavaScript具有强大的灵活性,字段的访问是通过String来匹配的,通过运算符[]来完成,这为可变参数的实现提供了便利
可以这样遍历传入函数的参数:
function f() {
  console.log(arguments)
  console.log(arguments.length)
  for (var key in arguments) {
    console.log(`${key} -> ${arguments[key]}`)
  }
}
f('a', 'b', 'c')
// output:
[object Arguments] {
  0: "a",
  1: "b",
  2: "c"
}
3
"0 -> a"
"1 -> b"
"2 -> c"
现在可以用arguments[0]、arguments['1']来依次获取第1、2个参数
END
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号