VisYang's Studio.

原生 js & jQuery & H5 & CSS3 操作元素和绑定事件方式等

2015/02/15

乱入jQuery小demo

原生 js 相关

DOM 选择器

  • document.getElementById(“#id”); //id选择器
  • document.getElementsByTagName(“TagName”); //返回一个包含所有这个标签名的一个伪数组
  • document.getElementsByName(“name”); //返回一个特定name值的伪数组
  • document.getElementsByClassName(‘name’)
  • document.querySelector()
  • document.querySelectorAll()
  • element.parentNode; //获取父级节点
  • element.parentElement; //获取父级元素
  • element.childNodes; //元素中所有子级节点
  • element.children; //元素中所有子级元素
  • 兼容问题element.firstChild; //元素中第一个子级节点

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function getFirstElement(element){
    if(element.firstElementChild){
    return element.firstElementChild;
    }else{
    var node = element.firstChild;
    while(node && node.nodeType != 1){
    node = node.nextSibling;
    }
    return node;
    }
    }

    兼容问题element.firstElementChild; //元素中所有子级元素
    兼容问题element.lastChild; //元素中最有一个子级节点
    兼容问题element.lastEleemntChild; //元素中最后一个子级元素
    兼容问题element.previousSibling; //元素的前一个兄弟节点
    兼容问题element.previousEleemntSibling; //元素的前一个兄弟元素
    兼容问题element.nextSibling; //元素的后一个兄弟节点
    兼容问题element.nextElementSibling; //元素的后一个兄弟元素
    兼容问题element.lastEleemntChild; //获取某个元素中最后一个子元素

DOM 方法/属性

  • document.createElement(“name”); //在页面创建一个标签
  • parent.appendChild(“ChildEle”); //将元素添加到父级元素中
  • element.getAttribute(“attributename”); //返回该属性的值
  • element.setAttribute(“attributename”,attributevalue); //设置自定义属性名和值
  • element.removeAttribute(“attributename”); //移除特定属性名的属性
  • element.属性名(“attributevalue”); //设置属性的值
  • element.nodeType; //检测元素是什么,如果是标签–>(1),如果是属性–>(2),如果是文本–>(3)
  • element.nodeName; //检测元素,如果是标签–>(标签的名字,大写的),如果是属性–>(属性的名字,小写的),如果是文本–>(#text)
  • element.nodeValue; //检测元素,标签–>null,属性–>属性的值,文本–>文本内容
  • element.innerText=’’; //修改元素的文本内容
  • var 克隆体名字 = element.cloneNode(true); // 克隆某个元素包括其内的所有成员生成一个新的元素
  • 创建元素的三种方式:

    • document.write();
    • element.innerHTML=’’; //拼接字符串创建元素
    • document.createElement(‘name’);//创建元素
  • element.style.属性名=’属性值’;//注意属性名要用驼峰命名法

  • element.offsetWidth; //获取元素的宽(数字类型)有边框
  • element.offsetHeight; //获取元素的高(数字类型)有边框
  • element.offsetLeft; //获取元素距离左边位置的距离
  • element.offsetTop ; //获取元素距离上边位置的距离

    1
    2
    3
    如果父级元素脱离文档流,子级元素此时的offsetLeft获取的是相对父级元素的值
    如果父级元素没有脱离文档流,此时的子级元素的offsetLeft获取的是父级元素的margin+父级元素padding+父级元素的border+子级元素自己的margin
    如果元素自己脱离文档流,此时的offsetLeft:自己的left+自己的margin
  • scrollWidth; //元素内容实际的宽,没有边框,如果没有内容,是元素的宽

  • scrollHeight; //元素内容实际的高,没有边框,如果没有内容,是元素的高
  • scrollLeft; //向左卷曲出去的距离(兼容问题)
    scrollTop; //向上卷曲出去的距离(兼容问题)
  • clientWidth; //可视区域的宽
  • clientHeight; //可视区域的高
  • 兼容问题 pageX:页面的横坐标,谷歌和火狐支持,IE8不支持–相当于:clientX+scrollLeft
  • 兼容问题 pageY:页面的纵坐标,谷歌和火狐支持,IE8不支持–相当于:clientY+scrollTop

原生 js 事件相关

事件

  • element.onload=function(){}; //页面加载事件
  • element.onchange=function(){}; //改变事件
  • element.onmouseover=function(){}; //鼠标进入事件
  • element.onmouseout=function(){}; //鼠标离开事件
  • element.onclick=function(){}; //鼠标点击事件
  • element.onfocus=function(){}; //获取焦点事件
  • element.onblur=function(){}; //失去焦点事件
  • element.onmousedown=function(){}; //鼠标按下事件
  • element.onmouseup=function(){}; //鼠标抬起事件
  • document.onmousemove=function (e) { 兼容问题
    //e.clientX 和e.clientY是获取次数鼠标针对页面左上角的可视区域的横做坐标
    my$(“im”).style.left=e.clientX+”px”;
    my$(“im”).style.top=e.clientY+”px”;
    };
  • my$(“dv”).onscroll=function () {}; //滚动事件

绑定(解绑)事件方法

  • element.addEventListener(“事件名”,fn,false); //addEventListener—谷歌支持,火狐支持,IE11支持,IE8不支持,函数内部this–当前触发该事件的对象
  • element.revemoEventListener(“事件名”,fn,false); addEventListener对应事件解绑方法
  • my$(“btn”).attachEvent(“on事件名”,fn); //attachEvent():谷歌不支持,火狐也不支持,IE8支持的,….IE11不支持,函数内部this—window
  • element.attachEvent(“on事件名”,fn); //attachEvent解绑事件的方法

jQuery

注意:要想链式 编程,必须是对象调用什么内容之后返回的还是当前的这个对象
链式编程可能会遇到断链的问题,使用.end()修复断链(恢复到断链之前的状态)

jQuery 事件

  • 页面加载事件: $(function(){});

jQuery 绑定事件方法

  • $(element).click(function(){});
  • bind方法:对应的解绑的方法:unbind方法
  • delegate方法:对应的解绑的方法:undelegate方法
  • on方法:对应的解绑的方法:off方法 推荐使用on方法,因为bind和delegate方法内部都是使用on方法绑定事件
    1
    2
    3
    4
    $("#dv").on("click","p",function () {
    console.log("p被点击了");
    });
    $("#dv").off("click");

jQuery 操作样式

  • $(element).css(“propertyname”:”value”,”propertyname”:”value”);//设置多项属性
  • $(element).css(“propertyname”,”value”).css(“propertyname”,”value”);//链式编程
  • 对象.css({propertyname:value});

jQuery 选择器

  • $(“#id”); //id选择器
  • $(“tagname”); //标签选择器
  • $(“.classname”); //类选择器
  • $(“tagname.classname”); //多条件选择器(多标签条件)
  • 层级选择器
    • $(“parent child”); //父元素 里面所有的 子元素 元素
    • $(“parent>child”); //里面直接的 子元素
    • $(“parent+child”); //当前元素后面的第一个 兄弟元素
    • $(“parent~child”); //当前元素后面所有的 兄弟元素
  • $(“eles:odd”); //奇数选择器
  • $(“eles:even”); //偶数选择器
  • 索引选择器:
    • :eq(index); //等于这个索引的元素
    • :gt(index); //大于这个索引的所有元素
    • :lt(index); //小于这个索引的所有元素

jQuery 操作元素

  • .val(); //方法,有参数就是设置元素的value属性值,没有参数就是获取
  • .html(); //方法,同上,设置或者获取元素中的html标签及内容
  • .text(); //方法,同上.,设置或者获取元素中文本内容
  • 添加类名
    • .addClass(“classvalue”); //给class设值–>添加类名
    • .addClass(“classname”).addClass(“类样式的名字”);
    • .addClass(“classname classname”);
  • .removeClass(“classname”);//移除类名
  • .toggleClass(“classname”);//切换类样式
  • 创建标签:
  • $(“name”); //创建标签返回的是对象
  • $(“selector”).html(“content”);//html()方法相当于DOM中的innerHTML
  • 将标签添加到页面指定元素内:
  • .append(); //方法:父级元素.append(子级元素);注意:有可能发生剪切的效果
  • .appendTo(); //方法:子级元素.appendTo(父级元素);
  • .html(“”); //清空当前元素中的内容
  • .empty(); //清空当前元素中的内容
  • .remove(); //移除当前元素
  • .index(); //获取的是元素的索引
  • .find(); //查找某个元素
  • .siblings(); //获取的是当前元素的其他的所有的兄弟元素(不包括自己)
  • .next(); //获取的是当前元素的下一个兄弟元素
  • .nextAll(); //获取的是当前元素后面的所有的兄弟元素
  • .prev(); //获取的是当前元素的上一个兄弟元素
  • .prevAll(); //获取的是当前元素的前面的所有的兄弟元素
  • .attr(“attrname”,”attrvalue”); //设置某个元素的自定义属性及值
  • .attr(“attrname”); //获取该元素的这个自定义属性的值
  • .removeAttr(“attrname”); //移除该属性和值
  • .prop(“attrname”,attrvalue); //可以设置元素的选中的属性及值
  • .prop(“attrname”); //获取该属性的值
    注意:一般非选中的属性使用attr方法,否则建议使用.prop方法
  • .width(); //设置元素的宽
  • .height(); //设置元素的高
  • 设置和获取元素left和top推荐使用.offset()方法:
    • .offset({“left”:value,”top”:value}); //设置
  • 设置和获取元素的卷曲出去的距离left和top:
    • .scrollLeft()方法或者是.scrollTop()方法
  • $elements.each(function(i,item){tudo}); //遍历数组做事情

jQuery animate动画函数和其他动画效果

  • .animate({style},speed,easing,callback);
    • style 必需 设置样式,多选,键值对方式
    • speed 可选 设置执行动画总时长(可设置毫秒,也可设置slow、normal、fast)
    • easing 可选 在不同的动画点中设置动画速度的 easing 函数。(linear、swing)
    • callback 可选 animate 函数执行完之后,要执行的函数。
  • show(); //显示
  • hide(); //隐藏
  • slideUp(); //滑上
  • slideDown(); //滑下
  • slideToggle();//切换滑入和滑出
  • fadeIn(); //淡入
  • fadeOut(); //淡出
  • fadeToggle(); //淡入淡出
  • fadeTo(); //设置在多长的时间把透明度降低或者设置为多少

html5

html5 新增选择器

  • document.getElementsByClassName(‘ClassName’); //类名选择器
  • document.querySelector(‘selector’); //通过CSS选择器获取元素,符合匹配条件的第1个元素。
  • document.querySelectorAll(‘selector’); //通过CSS选择器获取元素,以伪数组形式存在
  • Node.classList.add(‘ClassName’); //移除类样式
  • Node.classList.remove(‘ClassName’); //移除类样式
  • Node.classList.toggle(‘ClassName’); //切换类样式,有则移除,无则添加
  • Node.classList.contains(‘ClassName’); //检测是否存在类样式
  • 自定义属性操作:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <p data-name-dec="小三" data-sex="男">这是p</p>
    p.dataset--->{name:"小三",sex:"男"}
    获取:
    对象.dataset.name--->该属性的值
    对象.dataset["name"]--->该属性的值
    设置:
    对象.dataset["name"]="新的值";
    对象.dataset.name="新的值";
    注意:获取和设置的时候属性名字遵循驼峰命名法,最终在标签中才能形成如下形式:
    data-名字-名字-名字="值";

css

css 属性选择器

  • E[att] CSS2选择具有att属性的E元素
  • E[att=”val”] CSS2选择具有att属性且属性值等于val的E元素
  • E[att~=”val”] CSS2选择具有att属性且属性值中如果有多个值,其中空格隔开的属性为val的E元素;例如(att=“val a b”)
  • E[att^=”val”] CSS3具有att属性且属性值开头为val的字符串的E元素
  • E[att$=”val”] CSS3具有att属性且属性值为val结尾的字符串的E元素
  • E[att*=”val”] CSS3具有att属性且属性值为包含val的字符串的E元素
  • E[att|=”val”] CSS2具有att属性且属性值为以val开头并用连接符“-”分隔的字符串E元素,如果属性值仅为val也将被选择;

伪类选择器

  • li:first-child{color:red} 第一个:找到li父元素中的第一个li
  • li:last-child{color:red} 最后一个:找到li父元素中最后一个li
  • li:empty{to do} 空选择器:如果li里面没有内容,则设置的样式才会生效
  • li:target{to do} 目标选择器:当跳转到当前目标时,样式才会生效
  • li:not(.two){to do} 排除选择器:排除类名为.two的li,剩下的li应用样式
    li:before, 在li里面元素的前面设置伪类
    li:after{ 在li里面元素的后面设置伪类
    content:””; display:block;
    }

结构选择器

  • li:nth-child(n){color:red} 第几个:找到li父元素中第n个li
  • li:nth-child(even){color:orange} 偶数:找到li父元素中所有的偶数li
  • li:nth-child(odd){color:red} 奇数:找到li父元素中所有的奇数li
  • li:nth-child(7n){color:red} 最后一列:每行总元素数乘以N就是找到li父元素中最后一列li
  • li:nth-child(7n-1){color:red} 倒数第二列:大致如上;
  • li:nth-child(-n+3){color:red} 前三个:li父元素中前三个li
  • li:nth-last-child(-n+3){color:red} 后三个:li父元素中后三个li

伪元素选择器

  • li:first-letter{color:red} 找到每个li内第一个字符
  • li:first-line{color:red} 找到每个li中第一行的字符
  • li::selection{color:red} 找到被选中的li的内容
    li::before,
    li::after{
    content:””; display:block;
    }
CATALOG
  1. 1. 原生 js 相关
    1. 1.1. DOM 选择器
    2. 1.2. DOM 方法/属性
    3. 1.3. 原生 js 事件相关
      1. 1.3.1. 事件
      2. 1.3.2. 绑定(解绑)事件方法
  2. 2. jQuery
    1. 2.1. jQuery 事件
    2. 2.2. jQuery 绑定事件方法
    3. 2.3. jQuery 操作样式
    4. 2.4. jQuery 选择器
    5. 2.5. jQuery 操作元素
    6. 2.6. jQuery animate动画函数和其他动画效果
  3. 3. html5
    1. 3.1. html5 新增选择器
  4. 4. css
    1. 4.1. css 属性选择器
    2. 4.2. 伪类选择器
    3. 4.3. 结构选择器
    4. 4.4. 伪元素选择器