browser-x
Version:
A partial implementation of the W3C DOM API on top of an HTML5 parser and serializer.
75 lines (68 loc) • 1.74 kB
JavaScript
var HTMLElement = require('../html-element');
function HTMLSelectElement(document, name, namespaceURI) {
HTMLElement.call(this, document, name, namespaceURI);
}
HTMLSelectElement.prototype = Object.create(HTMLElement.prototype, {
options: {
// TODO return HTMLOptionsCollection
get: function() {
return this.getElementsByTagName('option');
}
},
multiple: {
get: function() {
return this.hasAttribute('multiple');
}
},
type: {
get: function() {
return this.multiple ? 'select-multiple' : 'select-one';
}
},
selectedIndex: {
get: function() {
return Array.prototype.reduceRight.call(this.options, function(prev, option, i) {
return option.selected ? i : prev;
}, -1);
}
},
length: {
get: function() {
return this.options.length;
}
},
value: {
get: function() {
var i = this.selectedIndex;
if (this.options.length && (i === -1)) {
i = 0;
}
if (i === -1) {
return '';
}
return this.options[i].value;
}
},
disabled: {
get: function() {
return this.hasAttribute('disabled');
}
},
form: {
get: function() {
return closest('FORM');
}
}
});
HTMLSelectElement.prototype.constructor = HTMLSelectElement;
function closest(e, nodeName) {
while (e) {
if (e.nodeName === nodeName) {
return e;
}
e = e.parentNode;
}
return null;
}
module.exports = HTMLSelectElement;
;