如何将下面的jquery代码转换为原型?
<script>
$(document).ready (function() {
$("#valor").keyup(function(){
var resultVal = 0.0;
var objRegExp = '\s+';
$("#valor").each ( function() {
resultVal += parseFloat ( $j(this).val().replace(/\s/g,'').replace(',','.'));
});
$("#total").val(resultVal);
});
});
</script>
感谢。
答案 0 :(得分:3)
我不知道,但纯JavaScript总是很好看:
function doLoad() {
var valor = document.getElementById("valor");
valor.onkeyup = function() {
var resultVal = 0.0;
var objRegExp = '\s+';
for(var i = 0; i < valor.childNodes.length; i++) {
var n = valor.childNodes[i];
if(n.nodeType === 1) resultVal += parseFloat(n.value.replace(/\s/g, '').replace(',', '.'));
}
document.getElementById("total").value = resultVal.toString();
};
}
if(window.addEventListener)
window.addEventListener("load", doLoad, false);
else
window.attachEvent("onload", doLoad);
答案 1 :(得分:2)
以下是迁移的实例:
eventObserver = function() {
var resultVal = 0.0;
var objRegExp = '\s+';
$$(".valor").each(function(el) {
resultVal += parseFloat($(el).getValue().replace(/\s/g, '').replace(',', '.'));
});
$("total").setValue(resultVal);
};
$$('.valor').each(function(el) {
el.observe('keyup', eventObserver);
});
从您的代码中,我猜您有几个输入具有相同的id
(valor
)。如果是这种情况,那就错了,因为ID在整个DOM中必须是唯一的。
这就是为什么我为名为class
的{{1}}更改了此内容。
Prototype有一个特殊的valor
函数来通过css-selector获取元素。但是使用$$
进行id搜索或将DOM元素转换为Prototype-enabled元素。
调用$
方法时,不必使用each
作为原始集合中的每个元素(就像在jQuery中一样),必须使用函数中的第一个参数:{{1} }。
您必须使用this
。
el
jQuery方法
在我看来,jQuery更优雅,或者至少,我知道的Prototype并不那么花哨:)