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

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

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

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


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

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

function supportsVml() {
if (typeof supportsVml.supported == "undefined") {
var a = document.body.appendChild(document.createElement('div'));
a.innerHTML = '';
var b = a.firstChild;
b.style.behavior = "url(#default#VML)";
supportsVml.supported = b ? typeof b.adj == "object": true;
a.parentNode.removeChild(a);
}
return supportsVml.supported
}
function supportsSvg() {
return document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Shape", "1.0")
}

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元素时,遗漏了它的某些属性见这里

//下面代码是从我的avalon抠出来的,结合了jQuery对cloneNode方法的修正以及我对VML元素的处理
function fixCloneNode(src) {
var target = src.cloneNode(true)
if (window.VBArray) {//只处理IE
var srcAll = getAll(src)
var destAll = getAll(target)
for (var k = 0, src; src = srcAll[k]; k++) {
if (src.nodeType === 1) {
var nodeName = src.nodeName
var dest = destAll[k]
if (nodeName === "INPUT" && /radio|checkbox/.test(src.type)) {
dest.defaultChecked = dest.checked = src.checked
if (dest.value !== src.value) {
dest.value = src.value//IE67复制后,value从on变成""
}
} else if (nodeName === "OBJECT") {
if (dest.parentNode) {//IE6-10拷贝子孙元素失败了
dest.outerHTML = src.outerHTML
}
} else if (nodeName === "OPTION") {
dest.defaultSelected = dest.selected = src.defaultSelected
} else if (nodeName === "INPUT" || nodeName === "TEXTAREA") {
dest.defaultValue = src.defaultValue
} else if (nodeName.toLowerCase() === nodeName && src.scopeName && src.outerText === "") {
//src.tagUrn === "urn:schemas-microsoft-com:vml"//判定是否为VML元素
var props = {}//处理VML元素
src.outerHTML.replace(/\s*=\s*/g, "=").replace(/(\w+)="([^"]+)"/g, function(a, prop, val) {
props[prop] = val
}).replace(/(\w+)='([^']+)'/g, function(a, prop, val) {
props[prop] = val
})
dest.outerHTML.replace(/\s*=\s*/g, "=").replace(/(\w+)="/g, function(a, prop) {
delete props[prop]
}).replace(/(\w+)='/g, function(a, prop) {
delete props[prop]
})
delete props.urn
delete props.implementation
for (var i in props) {
dest.setAttribute(i, props[i])
}
fixVML(dest)
}
}
}
}
return target
} function fixVML(node) {
if (node.currentStyle.behavior !== "url(#default#VML)") {
node.style.behavior = "url(#default#VML)"
node.style.display = "inline-block"
node.style.zoom = 1 //hasLayout
}
}

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. 浅谈jsonp

    要谈jsonp,首先要弄明白jsonp是什么,它是用来干嘛的.jsonp其实就是我们常用的script标签,用来解决跨域的,只不过这个标签是动态创建的,为啥要动态创建涅. 举个小栗子: 假如我们远程文 ...

  2. linux下redis的安装及配置启动

    linux下redis的安装及配置启动 标签: redisnosql 2014-10-24 14:04 19732人阅读 评论(0) 收藏 举报  分类: 数据与性能(41)  wget http:/ ...

  3. 『转』Kaspersky Internet Security for Android &KMS – 免费6个月

    卡巴越南的活动,需要注册账户,完成小调查,24小时内发送激活码,激活码3个月内有效.建议用谷歌翻译下网站.KIS for Android 的激活码也通用于 Kaspersky Mobile Secur ...

  4. python的单元测试代码编写流程

    单元测试: 单元测试是对单独的代码块分别进行测试, 以确保它们的正确性, 单元测试主要还是由开发人员来做, 其余的集成测试和系统测试由专业的测试人员来做. python的单元测试代码编写主要记住以下几 ...

  5. 历史上的重大软件BUG启示录第9篇---微软的硬件尝试

    (图片来源于网络) 2001年苹果公司发布第一代iPod,它的推出在当时引起了轰动,它拥有大容量存储空间和全新的操作方式,并且还非常漂亮(在当时看来),因此在市场上大受欢迎,苹果公司也因此赚的盆满钵满 ...

  6. vue url生产二维码

    <template> <div id="QRcode"> <div class='QR-qrcode' style='display:none;'&g ...

  7. SVN 定时 更新代码 Demo

    1. 涉及技术: Winservice: 用system身份后台跑:  Quartz:定时任务:  SVN 2. 思路: Quartz定时调用cmd 程序,执行SVN update 命令,整个程序寄宿 ...

  8. [C#] DataTable转成List集合

    项目开发中,经常会获取到DataTable对象,如何把它转化成一个List对象呢?前几天就碰到这个问题,网上搜索整理了一个万能类,用了泛型和反射的知识.共享如下: public class Model ...

  9. BZOJ3732: Network(Kruskal重构树)

    题意 Link 给出一张$n$个点的无向图,每次询问两点之间边权最大值最小的路径 $n \leqslant 15000, m \leqslant 30000, k \leqslant 20000$ S ...

  10. ambassador 学习六 Module说明

    模块允许给与特定的mapping 或者整体添加特定的行为,方便进行系统的控制. 当前的module 定义主要是系统级别的 当前系统主要的配置 --- apiVersion: ambassador/v0 ...