当前位置:嗨网首页>书籍在线阅读

59-讨论

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.14.3 讨论

.html() 方法使用 .innerHTML 属性将HTML内容插入 DOM , 但是该方法需要一些预处理。在大部分情况下,这不成问题,但是在性能至关重要的代码中,可以直接设置 .innerHTML 属性以节约时间。

实际进行这一处理的是jQuery内部方法.clean()。如果你阅读.clean()的源代码,就会发现它对HTML输入进行了一些清理工作。

注意

找到jQuery源代码中大部分方法的最简方式是搜索方法名称后面加上一个 ,例如,为了寻找 .clean() 方法,可以在无压缩的jQuery源代码中搜索 clean:

秘诀5.11中的代码与这种清理工作冲突。该秘诀的HTML代码包含大量的 <br/> 标记。 .clean() 中有一个正则表达式,用来查找所有自结束标记(以/>结束,因而不需要结束标记),并检查这些标记是否确实是可以自结束的HTML标记集中的一员。如果不是,则将HTML转换为一个开始-结束标记。

例如,如果编写的代码是 $('#test').html('<div />'); ,这个无效的HTML会自动转换为 $('#test').html('<div></div>'); ,这种转换使编码更容易,但是如果HTML字符串很长,包含许多自结束标记, .clean() 就必须全部检查——即使所有的标记都是有效的(如其他秘诀中的 <br/> 标记)也不例外。

.html() 方法替换所有现有的内容,并且删除所有被替换元素中通过jQuery附加的事件处理程序,以避免内存泄漏。如果被替换内容中有事件处理程序,你应该坚持使用 .html() ,如果只需要清理事件处理程序,不需要其他HTML清理,可以使用 $('#test').empty() [0].innerHTML = myhtml;

基本的标准是:如果你确定代码中不需要jQuery提供的事件清理或者HTML清理,那么你可以小心地直接使用 .innerHTML 。否则为了安全起见,坚持使用 .html()