Javascript 如何为IE8<;=实现node.localName等效项?

Javascript 如何为IE8<;=实现node.localName等效项?,javascript,jquery,internet-explorer,local-storage,Javascript,Jquery,Internet Explorer,Local Storage,我想在我的库中添加一些旧的浏览器支持 我发现我的一个主要函数getPath依赖于localName,这在IE8 pathname>form上是不受支持的。[:eq(x)]>输入。 没有eq();必须全部存储在同一表单中的同一字段名下 *复选框:域>路径名>表单。[:eq(x)]>[fieldset,div,span..]>输入。[:eq(y)] 因为他们有相同的名字,必须检测他们在表单中的确切位置。检测DOM元素中的确切层次结构 *其他输入:域>路径名>表单。[:eq(x)]>输入。[:eq(y

我想在我的库中添加一些旧的浏览器支持

我发现我的一个主要函数
getPath
依赖于
localName
,这在IE8 pathname>form上是不受支持的。[:eq(x)]>输入。 没有eq();必须全部存储在同一表单中的同一字段名下 *复选框:域>路径名>表单。[:eq(x)]>[fieldset,div,span..]>输入。[:eq(y)] 因为他们有相同的名字,必须检测他们在表单中的确切位置。检测DOM元素中的确切层次结构 *其他输入:域>路径名>表单。[:eq(x)]>输入。[:eq(y)] 我们只需要给定表单中的元素名/eq() */ ,getPath:函数(){ //需要一个元素。 if(this.$element.length!=1){ 返回false; } 变量路径=“” ,fullPath=this.$element.is('input[type=checkbox]')) ,node=this.$element; while(node.length){ var realNode=节点[0] ,name=realNode.localName; 如果(!name){ 打破 } name=name.toLowerCase(); var parent=node.parent() ,兄弟姐妹=父母。子女(姓名); //不需要使用select、字段集、DIV和其他嘈杂的元素污染路径, //除了需要精确路径的复选框外,因为z有相同的名称,有时还有相同的eq()! if(!$(realNode).is('form,input,select,textarea')&&&!fullPath){ 节点=父节点; 持续 } //将输入类型设置为名称+名称属性(如果存在) name+=$(realNode).attr('name')?'.+$(realNode.attr('name'):''; //如果有sibling,则获取eq(),单选按钮除外 if(sibbines.length>1&&!$(realNode).is('input[type=radio]')){ name+=':eq('+同级索引(realNode)+'); } 路径=名称+(路径?'>'+路径:“”); //一旦我们达到形式:eq(x),就不需要再进一步了 if('form'==realNode.localName){ 打破 } 节点=父节点; } 返回'garmal:'+document.domain+(this.options.domain?'*':window.location.pathname)+'>'+path; }
好的,我使用了
nodeName
属性,它可以正常工作

/* retuns an unique identifier for form elements, depending on their behaviors:
   * radio buttons: domain > pathname > form.<attr.name>[:eq(x)] > input.<attr.name>
      no eq(); must be all stored under the same field name inside the same form

   * checkbokes: domain > pathname > form.<attr.name>[:eq(x)] > [fieldset, div, span..] > input.<attr.name>[:eq(y)]
      cuz' they have the same name, must detect their exact position in the form. detect the exact hierarchy in DOM elements

   * other inputs: domain > pathname > form.<attr.name>[:eq(x)] > input.<attr.name>[:eq(y)]
      we just need the element name / eq() inside a given form
*/
, getPath: function () {

  // Requires one element.
  if ( this.$element.length != 1 ) {
    return false;
  }

  var path = ''
    , fullPath = this.$element.is( 'input[type=checkbox]')
    , node = this.$element;

  while ( node.length ) {
    var realNode = node[0]
      , name = realNode.localName;

    if ( !name ) {
      break;
    }

    name = name.toLowerCase();

    var parent = node.parent()
      , siblings = parent.children( name );

    // don't need to pollute path with select, fieldsets, divs and other noisy elements,
    // exept for checkboxes that need exact path, cuz have same name and sometimes same eq()!
    if ( !$( realNode ).is( 'form, input, select, textarea' ) && !fullPath ) {
      node = parent;
      continue;
    }

    // set input type as name + name attr if exists
    name += $( realNode ).attr( 'name' ) ? '.' + $( realNode ).attr( 'name' ) : '';

    // if has sibilings, get eq(), exept for radio buttons
    if ( siblings.length > 1 && !$( realNode ).is( 'input[type=radio]' ) ) {
      name += ':eq(' + siblings.index( realNode ) + ')';
    }

    path = name + ( path ? '>' + path : '' );

    // break once we came up to form:eq(x), no need to go further
    if ( 'form' == realNode.localName ) {
      break;
    }

    node = parent;
  }

  return 'garlic:' + document.domain + ( this.options.domain ? '*' : window.location.pathname ) + '>' + path;
}