平时工作中的积累

平时工作中的积累

  1. DOM对象的dataset属性
    在写富盈项目的时候遇到了这一段代码,因为接收富盈的时候已经有一小部分是公司前辈写的,(在这里我想说,写别人写过的项目,好也不好,好处是别人写的项目有些需求可能出现了bug,或者是需求需要小小的改动,这样你都是要研究下别人的代码,然后进行修改,这样可能就会发现你之前没遇到过的写法,和技术,然后你仔细研究之后对你会收益颇深,尤其是我这种没有经验的人,我的工作中技术提升也就是收益与这一点。不好的一点是遇到那种逻辑性很强,你要很仔细地去跟着别人的逻辑思考,确定确实很头疼。废话不多说了,赶快进入正题。)
    1. dataset
    1、 什么是dataset
    html5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相应的id:
<a href="javascript:;" data-id="2312">测试</a>

这里的data-前缀就被称为data属性,其可以通过脚本进行定义,也可以应用css属性选择器进行样式设置.数量不受限制,在控制和渲染数据的时候提供了非常强大的控制.

<div id="day-meal-expense" data-drink="tea" data-food="noodle" data-meal="lunch">$18.3</div>

要想获取某个属性的值,可以像下面这样使用dataset对象:

 var expenseday=document.getElementById('day-meal-expense');
 var typeOfDrink=expenseday.dataset.drink;
 console.log(typeOfDrink);//tea
 console.log(expenseday.dataset.food);//noodle
 console.log(expenseday.dataset.meal);//lunch

2、为何要使用dataset
如果使用传统的方法获取属性值应该会类似下面:

var typeOfDrink=document.getElementById('day-meal-expense').getAttribute('data-drink');

现在,如果我们要获得多个自定义的属性值,就要用下面N行代码来实现了:

var attrs=expenseday.attributes, expense={},i,j;
for (i=0,j=attrs.length;i<j;i++){
  if(attrs[i].name.substring(0,5)=='data-'){
    expense[attrs[i].name.substring(5)]=attrs[i].value;
  }
}

而使用dataset属性,我们根本不需要任何循环去获取你想要的那个值,直接一行秒杀:

expense=document.getElementById('day-meal-expense').dataset;
delete expenseday.dataset.meal;
console.log(expenseday.dataset.meal)//undefined

3、dataset的操作:
可以像下面这样操作名-值对:

charInput=[];
  for(var item in expenseday){
    charInput.push(expenseday[item]);
  }

上面这几千代码的作用是让所有的自定义属性塞到一个数组中.
如果你想删除一个data属性,可以这么做:

delete expenseday.dataset.meal;
  console.log(expenseday.dataset.meal)//undefined

如果你想给元素添加一个属性,可以这么做:

expenseday.dataset.dessert='icecream';
  console.log(expenseday.dataset.dessert);//icecream

*2 delegate ***
delegate()函数用于为指定元素的一个或多个事件绑定事件处理函数。
例如:
/
上传图片 */

    $("#js_tupian").delegate("#upload-image", "click", function () {
        $('#upload-img').trigger('click');
    });

此外,你还可以额外传递给事件处理函数一些所需的数据。
即使是执行delegate()函数之后新添加的元素,只要它符合条件,绑定的事件处理函数仍然对其有效。
此外,该函数可以为同一元素、同一事件类型绑定多个事件处理函数。触发事件时,jQuery会按照绑定的先后顺序依次执行绑定的事件处理函数。

要删除通过delegate()绑定的事件,请使用undelegate()函数。
从jQuery 1.7开始,请优先使用事件函数on()替代该函数。

猜你喜欢

转载自blog.csdn.net/literarygirl/article/details/83958831