古いブラウザのサポートをlibgarlicjs.orgに追加したいと思います。
私の主な機能の1つが、IE8ではサポートされていないことにgetPath
依存していることがわかりました<=localName
その関数では、libによってバインドされたDOM要素ごとに一意の識別子文字列を取得する必要があります。さらに重要なのは、ID、クラス、または名前に依存しないことです。
ああ、私は管理できますか:古いIEブラウザーでこのプロパティをサポートするには、またはすべてのブラウザーでサポートされている別のプロパティを使用して、この機能に期待されるのと同じ効果を管理できます。
ありがとう!
コードは次のとおりです。
/* 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;
}