将jQuery的每个函数转换为Prototype.js

时间:2011-07-19 15:05:39

标签: jquery prototypejs

我正在尝试将一段代码从jQuery转换为prototype.js并需要一些帮助。

的Prototype.js

$$('select').invoke('observe', 'change', function() {
    var sel = $(this);
    var selval = $(this).getValue();
    $(this).select('option').each(function (e) {
        $(e).remove();
        if ($(e).getValue() == selval) {
                 $(sel).append('<option value="'+$(e).getValue()+'" selected="selected">'+$(e).text+'</option>');
        } else {
            $(sel).append('<option value="'+$(e).getValue()+'">'+$(e).text+'</option>');
        }
    });
});

的jQuery

$('select').change(function() {
    var sel = $(this);
    var selval = $(this).val();
    $(this).find('option').each(function () {
        $(this).remove();
        if ($(this).val() == selval) {
            $(sel).append('<option value="'+$(this).val()+'" selected="selected">'+$(this).text()+'</option>');
        } else {
            $(sel).append('<option value="'+$(this).val()+'">'+$(this).text()+'</option>');
        }
    });
});

选择的第一部分似乎有效,但每个部分都不在原型版本中。它不喜欢getValue()等。$(e).getValue不是函数。如何让每个命令运行并检索元素值?

任何帮助都将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:2)

工作代码:

document.observe('dom:loaded',function(){
    $$('select').invoke('observe', 'change', function() {
        var sel = $(this);
        var selval = $(this).getValue();

        $(this).select('option').each(function (e) {
            $(e).remove();
            if ($(e).value == selval) {
                $(sel).insert('<option value="'+$(e).value+'" selected="selected">'+$(e).text+'</option>');
            } else {
                $(sel).insert('<option value="'+$(e).value+'">'+$(e).text+'</option>');
            }
        });
    });
});

答案 1 :(得分:1)

因此,您循环浏览所有选项并将其删除,以便您可以使用所选属性替换它们?这听起来很难做到这一点:

$$('select').invoke('observe', 'change', function() {
    this.select('option').invoke('writeAttribute', 'selected', false);
    this.select('option[value='+$F(this)+']').invoke('writeAttribute', 'selected');
});