虽然VML已经过气了,但有时我还不得不使用它,下面是我收集或研究得到的一些东西。

判定一个元素是否为VML元素

  1. function isVML(el) {
  2. if (el && el.nodeType === 1) {
  3. var nodeName = el.nameName
  4. //VML元素的nodeName都是小写,并且存在命名空间,并且outerText总为空
  5. return nodeName.toLowerCase() === nodeName && node.scopeName && node.outerText === ""
  6. }
  7. return false
  8. }

相对应判定一个SVG元素就简单多了

  1.  
  2. function isSVG(el) {
  3. return el && el.nodeType === 1 && (el instanceof window.SVGElement)
  4. }

判定浏览器是否支持SVG或VML

  1. function supportsVml() {
  2. if (typeof supportsVml.supported == "undefined") {
  3. var a = document.body.appendChild(document.createElement('div'));
  4. a.innerHTML = '';
  5. var b = a.firstChild;
  6. b.style.behavior = "url(#default#VML)";
  7. supportsVml.supported = b ? typeof b.adj == "object": true;
  8. a.parentNode.removeChild(a);
  9. }
  10. return supportsVml.supported
  11. }
  12. function supportsSvg() {
  13. return document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Shape", "1.0")
  14. }

VML的一级标签

shape, line, polyline, rect, roundrect, oval, arc, curve,background, image, shapetype, group

VML的二级标签

fill, stroke, shadow, extrusion, textbox, imagedata, textpath

IE8标准模式下VML不能显示问题可参见这里

IE下复制VML元素时,遗漏了它的某些属性见这里

  1. //下面代码是从我的avalon抠出来的,结合了jQuery对cloneNode方法的修正以及我对VML元素的处理
  2. function fixCloneNode(src) {
  3. var target = src.cloneNode(true)
  4. if (window.VBArray) {//只处理IE
  5. var srcAll = getAll(src)
  6. var destAll = getAll(target)
  7. for (var k = 0, src; src = srcAll[k]; k++) {
  8. if (src.nodeType === 1) {
  9. var nodeName = src.nodeName
  10. var dest = destAll[k]
  11. if (nodeName === "INPUT" && /radio|checkbox/.test(src.type)) {
  12. dest.defaultChecked = dest.checked = src.checked
  13. if (dest.value !== src.value) {
  14. dest.value = src.value//IE67复制后,value从on变成""
  15. }
  16. } else if (nodeName === "OBJECT") {
  17. if (dest.parentNode) {//IE6-10拷贝子孙元素失败了
  18. dest.outerHTML = src.outerHTML
  19. }
  20. } else if (nodeName === "OPTION") {
  21. dest.defaultSelected = dest.selected = src.defaultSelected
  22. } else if (nodeName === "INPUT" || nodeName === "TEXTAREA") {
  23. dest.defaultValue = src.defaultValue
  24. } else if (nodeName.toLowerCase() === nodeName && src.scopeName && src.outerText === "") {
  25. //src.tagUrn === "urn:schemas-microsoft-com:vml"//判定是否为VML元素
  26. var props = {}//处理VML元素
  27. src.outerHTML.replace(/\s*=\s*/g, "=").replace(/(\w+)="([^"]+)"/g, function(a, prop, val) {
  28. props[prop] = val
  29. }).replace(/(\w+)='([^']+)'/g, function(a, prop, val) {
  30. props[prop] = val
  31. })
  32. dest.outerHTML.replace(/\s*=\s*/g, "=").replace(/(\w+)="/g, function(a, prop) {
  33. delete props[prop]
  34. }).replace(/(\w+)='/g, function(a, prop) {
  35. delete props[prop]
  36. })
  37. delete props.urn
  38. delete props.implementation
  39. for (var i in props) {
  40. dest.setAttribute(i, props[i])
  41. }
  42. fixVML(dest)
  43. }
  44. }
  45. }
  46. }
  47. return target
  48. }
  49.  
  50. function fixVML(node) {
  51. if (node.currentStyle.behavior !== "url(#default#VML)") {
  52. node.style.behavior = "url(#default#VML)"
  53. node.style.display = "inline-block"
  54. node.style.zoom = 1 //hasLayout
  55. }
  56. }

VML元素的相关资料的更多相关文章

  1. http连接优化与浏览器允许的并发请求资源数相关资料(整理转载)

    网页性能优化相关资料: https://developer.yahoo.com/performance/rules.html#page-nav 前端技术的逐渐成熟,还衍生了domain hash, c ...

  2. android视频处理相关资料

    <开源>基于Android的点对点视频通信/RTSP/RTP/H.264 http://blog.csdn.net/cazicaquw/article/details/8650543 历经 ...

  3. 全文检索解决方案(lucene工具类以及sphinx相关资料)

    介绍两种全文检索的技术. 1.  lucene+ 中文分词(IK) 关于lucene的原理,在这里可以得到很好的学习. http://www.blogjava.net/zhyiwww/archive/ ...

  4. React Test相关资料

    karma 前端测试驱动器,生产测试报告,多个浏览器 mocha js的测试框架,相当于junit chai,单元测试的断言库,提供expect shudl assert enzyme sinon.j ...

  5. iOS10以及xCode8相关资料收集

    兼容iOS 10 资料整理笔记 源文:http://www.jianshu.com/p/0cc7aad638d9 1.Notification(通知) 自从Notification被引入之后,苹果就不 ...

  6. Nao 类人机器人 相关资料

    Nao 类人机器人 相关资料: 1.兄妹 PEPPER :在山东烟台生产,http://www.robot-china.com/news/201510/30/26564.html 2.国内机器人领先公 ...

  7. GBrowse配置相关资料

    GBrowse配置相关资料(形状.颜色.配置.gff3) http://gmod.org/wiki/Glyphs_and_Glyph_Optionshttp://gmod.org/wiki/GBrow ...

  8. AssetBundle机制相关资料收集

    原地址:http://www.cnblogs.com/realtimepixels/p/3652075.html AssetBundle机制相关资料收集 最近网友通过网站搜索Unity3D在手机及其他 ...

  9. 转:基于IOS上MDM技术相关资料整理及汇总

    一.MDM相关知识: MDM (Mobile Device Management ),即移动设备管理.在21世纪的今天,数据是企业宝贵的资产,安全问题更是重中之重,在移动互联网时代,员工个人的设备接入 ...

随机推荐

  1. gzip压缩初探

    前言 我们平时工作中传文件时为了提高传输速度一般都会把文件压缩一下再传,那样速度回快一些,尤其是那些文件很多的文件夹,比较常用的压缩格式就是zip,rar了.那我们日常网页中利用http协议请求的那些 ...

  2. 201621123005《java程序设计》第八次实验总结

    201621123005<Java程序设计>第八次实验总结 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1 ...

  3. timer Compliant Controller project (1)--Product introduction meeting

    Last week ,I lead the meeting for new project. i'm  very excited. The meeting is divided into the fo ...

  4. MySQL 服务正在启动 .MySQL 服务无法启动。系统出错。发生系统错误 1067。进程意外终止。

    MySQL 服务正在启动 .MySQL 服务无法启动.系统出错.发生系统错误 1067.进程意外终止. 检查了一个晚上才发现是---配置问题 #Path to installation directo ...

  5. 仿智能社官网:原生JS实现简单又酷炫的3D立方体时钟

    先放一下我做的效果:https://linrunzheng.github.io/3Dclock/3Dclock/new.html 至于3D立方体怎么做这里就不在阐述了,可以看一下我之前的博客. 这里默 ...

  6. Linux修改串口irq

    /******************************************************************************* * Linux修改串口irq * 说明 ...

  7. I.MX6 Manufacturing Tool V2 (MFGTool2) Emmc mksdcard-android.sh hacking

    #!/bin/bash # 参考文章: # . Shell特殊变量:Shell $, $#, $*, $@, $?, $$和命令行参数 # http://c.biancheng.net/cpp/vie ...

  8. python安装openSSL

    首先确定您是否下载python (3).pip (3).python-wheel 官网下载源码包openSSL 参考:用pip安装python 模块OpenSSL

  9. 深入php redis pconnect

    深入php redis pconnect pconnect是phpredis中用于client连接server的api. API文档中的一句原文: The connection will not be ...

  10. JS字符串的问题

    首先,搞了好几个小时,头都大了,原来出在字符串问题上. 具体如下: 今天做Yii,遇到用JQuery 的AJAX方法做注册验证,把传回来的字符串与textField中的比较,发现相等,但是就是不出结果 ...