浏览器不支持form.all方法

十几年前的系统,只支持ie,里面针对表单的处理大量使用了form.all("itemname")方法,导致在目前IE外的主流浏览器上无法运行
除了逐个修改为form["itemname"]之外,请问有没有别的办法可以直接改写form.all方法?比如引入一个公用js文件,在js文件中对form.all方法进行重写?
谢谢!

阅读 3.9k
1 个回答

DEMO,你可以再chrome和ie中看一下,看上去就是查找所有标签就完了。form.all == form.getElementsByTagName('*')。但是你传入itemname当做方法用的。测试了一下发现idname都可以查找可以改成

if(form.all === undefined){
    form.all = function(name){
        return form[name]
    }
}


更新-2019年2月12日17:46:15
可以看到form.__proto__HTMLFormElement,可以直接修改这个的HTMLFormElement.prototypeHTMLFormElement.prototype===form.__proto__搞定了。你可以去上面那个demo里面看

clipboard.png

clipboard.png

clipboard.png


var _form = document.createElement('form')
if(!_form.__proto__.all){
  _form.__proto__.all = function(name){
      return this[name]
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题