2011-01-11 52 views
0

有一次,我需要使用原型而不是jQuery,这让我不太舒服。 有人可以帮助我这个转换下面的脚本:从jQuery到Prototype的端口小函数?

var output={}; 
$('ul li').each(function(i,v){ 
    var l=$(this).text().substring(0,1).toUpperCase(); 
    if(typeof(output[l])=="undefined") output[l]=[]; 
    output[l].push($(this).text()); 
}); 
$('ul').empty(); 
for(var i in output){ 
    $('ul').append('<li><p>'+i+'</p></li>'); 
    for(var j in output[i]){ 
     $('ul').append('<li>'+output[i][j]+'</li>'); 
    } 
} 

完整的源:http://jsfiddle.net/flxfxp/3LwH8/7/

非常感谢!

回答

1
var output = $H({}); 

$$("ul li").each(function(el){ 
    var l = el.innerHTML.substr(0,1).toUpperCase(); 
    if(typeof(output.get(l))=="undefined") output.set(l, []); 
    output.get(l).push(el.innerHTML); 
}) 

$$('ul').invoke("update", ''); 

output.keys().each(function(key){ 
    var values = output.get(key); 
    $$('ul').first().insert('<li><p>'+key+'</p></li>'); 
    values.each(function(v){ 
    $$('ul').first().insert('<li>'+v+'</li>'); 
    }); 
}); 

测试了最新的原型

+0

真棒,谢谢! – FLX 2011-01-11 17:38:23

1

我的原型是一个有点生疏,但:

var output = $$('ul li').reduce({}, function(rv, li) { 
    var l = li.innerHTML.substring(0, 1).toUpperCase(); 
    (rv[l] = rv[l] || []).push(li.innerHTML); 
    return rv; 
}); 
$$('ul').update($(output).collect(function(list, letter) { 
    return '<li><p>' + letter + '</p></li>' + list.collect(function(txt) { 
    return '<li>' + txt + '</li>'; 
    }).join(''); 
}).join('')); 

我担心的唯一的事情就是.innerHTML是不一样的jQuery中.text(),但我不知道该怎么办.text()在Prototype中。

+0

@ egze的例子非常完美。虽然谢谢! – FLX 2011-01-11 17:38:39

1
document.observe("dom:loaded", function() { 
     var output = {}; 
     $$('ul.wikiext-taggedpages li').each(function(v, i) { 
      var l = v.innerHTML.substring(0, 1).toUpperCase(); 
      if (typeof(output[l]) == "undefined") { 
       output[l] = []; 
      } 
      output[l].push(v.innerHTML); 
     }); 

     console.log('output', output); 

     $$('ul.wikiext-taggedpages')[0].update(''); 
     for (var i in output) { 
      if (output.hasOwnProperty(i)) { 
       $$('ul.wikiext-taggedpages')[0].insert('<li><p>' + i + '</p></li>'); 
       for (var j in output[i]) { 
        if (output[i].hasOwnProperty(j)) { 
         $$('ul.wikiext-taggedpages')[0].insert('<li>' + output[i][j] + '</li>'); 
        } 
       } 
      } 
     } 
    }); 
相关问题