js基础升级3

1.使用document.createDocumentFragment()创建文档片段,相当于一个暂存文档节点的仓库,并不进行渲染。如果进行循环添加节点的时候,为了避免重复渲染,可以使用fragment进行存储,然后统一渲染。

var ul = document.getElementsByClassName("mylist")[0];
var fragment = document.createDocumentFragment();
for (var i = 0; i < 20; i++) {
    var li = document.createElement("li");
    li.innerHTML = "index: " + i;
    fragment.appendChild(li);
}
ul.appendChild(fragment);

2、访问属性节点
//创建属性

var atr=document.createAttribute("class");

//设置属性值,拼接属性值

atr.nodeValue=container.getAttribute("class")+" democlass";

//设置属性 也可以用container.className="xxx"直接进行赋值

container.setAttributeNode(atr);

//获取属性 或者直接用 元素.属性的方法 比如container.classList就获取class的集合

console.log(container.getAttribute("class"))


var img=document.getElementsByTagName("img")[0]
img.setAttribute("src","https:xxxx.jpg")
//或者用下面的
// img.src="https://xxxx.jpg"

删除属性

removeAttribute(name)

3.自定义属性,需要添加data-前缀这样提供语义信息,支持firefox 和chrome。使用时,需要使用dataset进行获取。

<div id="container"  data-test="lala">
  eeemmmm
</div>

console.log("dataset----"+container.dataset.test)
container.dataset.test="lalala"
console.log("dataset----"+container.dataset.test)

4.对于script的加载监听的问题,用于监听加载是否完成。

ie不支持window.function(){}的形式。但是script有一个readyState属性,如果有这个属性,那么就使用window.onreadystatechange=function(){}

5.JSONP
利用

6.css元素选择器
//这是获取到第一个元素

var li = document.querySelector(".mylist li")
li.style.backgroundColor="#ff0000"

// 这是获取到所有的元素

var liList=document.querySelectorAll(".mylist li")
for (var i = 0; i < liList.length; i++) {
     liList[i].style.backgroundColor="#ffff00"
}

//可以同时获取两个条件的节点

var liList=document.querySelectorAll(".mylist li,.mylist2 li")

7.js是用事件驱动实现的。当网页对象发生特定事件后,浏览器就会自动生成event,然后事件对象顺着DOM节点传递。

 bt_c.onclick = function (ev1) {
 //在ie的环境下,是window.event   这样进行兼容
  var e = ev1 || window.event
 console.log(e.srcElement ? e.srcElement : e.target)
}

注册事件

element.addEventListener(String type,Function listener,boolean useCapture)
type:注册事件名,不带on
listener:回调事件
useCapture:ture为捕获阶段触发,false为冒泡阶段。

type的值:
click:
mouseover:鼠标移进去
mouseout:

对于ie浏览器,使用attachEvent(typeName,function)
这里的typeName需要加on

销毁事件

element.removeEventListener(type,function)

对于ie浏览器

element.detachEvent(type,function)

注意:
一定要保持下面的三部分一致。
js基础升级3

event对象属性

altKey: false
bubbles: true    //是否为冒泡类型
button: 0
buttons: 0
cancelBubble: false   //是否取消冒泡
cancelable: true  //是否取消冒泡
clientX: 101
clientY: 243
composed: true
ctrlKey: false
currentTarget: null
defaultPrevented: false
detail: 1
eventPhase: 0
fromElement: null
isTrusted: true
layerX: 101
layerY: 339
metaKey: false
movementX: 0
movementY: 0
offsetX: 95
offsetY: 38
pageX: 101
pageY: 339
path: (5) [button#bt_c, body, html, document, Window]
relatedTarget: null
returnValue: true
screenX: 111
screenY: 380
shiftKey: false
sourceCapabilities: InputDeviceCapabilities {firesTouchEvents: false}
srcElement: button#bt_c
target: button#bt_c    //返回当前节点
timeStamp: 613.9050000019779
toElement: button#bt_c
type: "click"    //事件的名称
view: Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}
which: 1
x: 101
y: 243

event对象的方法:

preventDefault():通知浏览器不要执行与事件关联的默认操作
stopPropagation():终止事件在传播过程中的捕获,目标处理或冒泡阶段进一步传播。

//禁止超链接默认的跳转行为。

document.getElementById('a1').onclick = function(e) {
e = e || window.event;
var target = e.target || e.srcElement;
if(target.nodeName !== 'A') {
    return;
}
if( typeof e.preventDefault === 'function') {
    e.preventDefault();
    e.stopPropagation();
} else {
    e.returnValue = false;
    e.cancelBubble = true;
}
};