最近项目开发中的JS问题

1)  JavaScript原生结点 vs jQuery封装后结点

JavaScript原生结点存在各浏览器的兼容性;各个浏览器在实现其节点的时候提供的api不同,以event事件为例,FF 还有以webkit为内核的浏览器中 event的目标提供为event.target对象,而IE则提供为event.srcElement;

jQurey 很好的封装了这些功能特性,因此我们在使用节点的时候尽量使用jquery的原生结点,如果无法确定是否为jQuery的原生节点,可以使用$(node),然后使用jQuery提供的服务,但是jQuery封装后的节点我们不能使用setAttribute等属性,控制其属性和样式尽量使用attr,css等jquery提供的服务。

2)jQuery中事件的绑定和捕获

         a)明确jquery事件绑定的对象,尽量将在使用选择器绑定jquery事件的时候,尽量将所绑定的对象以对象的class或者id进行范围限制,单个元素往往使用id进行限制,而多个元素则使用class进行绑定。不要使用$(“div”).click等绑定方式,换而使用$(“div.myTarget”).click作为绑定方式;

         b)Dom在处理时间捕获的时候分为两个阶段:捕获阶段还有冒泡阶段

         当一个dom事件触发的时候,浏览器的window对象1会根据点击的对象一层层去查找时间的触发者,知道找到时间的触发器对象节点6,这是dom事件的捕获过程,当事件完成捕获以后,然后时间节点就会将dom事件进行封装后向上传播,一直到传递给window为止,这是冒泡过程,因此,所有子类的dom事件都可以被其父节点进行捕获,因此在处理大量相同操作的同级节点的时候可以使用这种传播特性。例如:

         <div  id=’parent’>

                          <a  href=”#” οnclick=’process(this)’ >target1</a>

<a href=”#” οnclick=’process(this)’ >target1</a>

<a href=”#” οnclick=’process(this)’ >target1</a>

<a href=”#” οnclick=’process(this)’ >target1</a>

……

         </div>

Div下的a连接的操作大多是相同的,只是他们需要处理的对象不同,因此我们可以将这种处理方式上升到其父类节点进行处理。可以使用一下方式处理:

$(“#parent”).click(function(event){

         process(event.target)

})

之所以使用这种方式而不是使用$(“a”).click是因为向浏览器注册过多的句柄会严重影响性能,尤其是对于IE这种内存释放存在很大问题的浏览器。

3)关于css的书写,如果需要自己定制样式文件,需要注意样式文件不应该对table,div这种进行定义,好多插件的样式混乱很有可能是FE提供的这种不正确的样式元素造成的,尽量使用table.className,div#id等方式定义自己的注释。

 

4)关于xss攻击和url转义

Xss:在jquery 1.6以后我们可以定义jQuery.ajaxPrefilter()进行非法参数的过滤,但是由于现在内网等系统大多使用jquery1.4,而mailadmin中使用的第三方插件jquery ui只支持到jquery1.5,所以这次是通过改写jquery核心库实现的,但是希望FE或者jquery高手们提供类似于ajaxPrefilter。

url转义:当使用get方式进行传递的时候的参数包含%符号的时候,如果强制使用javascript的encode方法的时候,可能会造成不正确的转义,因此我们需要注意尽量使用POST方式进行请求。

 

5)尽量使用jQuery提供的方法进行查询

         内网还有mailadmin中还是会出现getElementById或者getElementsByTagName等方式进行的dom节点查询和操作,但是这样的操作总是存在浏览器的兼容性问题,因此更推荐通过使用jquery的选择器等操作进行节点的操作。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值