$('select')
- 使用document.getElementsByTagName
,然后循环返回的列表
.change(function() {…}
- 查看浏览器差异的高级事件注册模型
$(this).val()
- 简单this.value
; 即使在 jQuery 中你也应该使用它
$(this).parent().parent()
- 获取parentNode
元素的(两次)
.find("input.hidden")
- 这有点难。您可以使用[ ],但这在旧版浏览器中不起作用。jQuery 用它的跨浏览器选择器引擎添加了很多糖。您可能会使用另一种方式来获取跨浏览器工作的输入元素;您可以尝试javascript document.getElementsByClassName 与 IE 的兼容性。.querySelector
All
.show()
- 只需删除display:none;
via el.style.display = "";
。顺便说一句,您可能只想删除该类hidden
而不是用内联样式覆盖它:-)
适用于 W3 兼容浏览器的真正香草:
[].each.call(document.getElementsByTagName('select'), function(select) {
select.addEventListener("change", function(e) {
if (this.value == "Other (please specify)") {
var inputs = this.parentNode.parentNode.querySelectorAll("input.hidden");
for (var i=0; i<inputs.length; i++)
inputs[i].classList.remove("hidden");
}
}, false);
});
这也应该适用于旧版浏览器:
(function(selects, handler) {
if (document.addEventListener)
for (var i=0; i<selects.length; i++)
selects[i].addEventListener("change", handler, false);
else
for (var i=0; i<selects.length; i++)
selects[i].attachEvent("onchange", handler);
})(document.getElementsByTagName('select'), function() {
if (this.value == "Other (please specify)") {
var inputs = this.parentNode.parentNode.getElementsByTagName("input");
for (var i=0; i<inputs.length; i++)
if (/\bhidden\b/.test(inputs[i].className))
inputs[i].style.display = "";
}
});