从jquery转换为mootools时出错?

时间:2012-05-29 03:41:20

标签: javascript jquery mootools

我有一些使用jquery的代码:

$(document).ready(function(){
   $('#tabs div').hide();
   $('#tabs div:first').show();
   $('#tabs ul li:first').addClass('active');
   $('#tabs ul li a').click(function(){ 
      $('#tabs ul li').removeClass('active');
      $(this).parent().addClass('active'); 
      var currentTab = $(this).attr('href'); 
      $('#tabs div').hide();
      $(currentTab).show();
      return false;
   });
});

我把它转换为使用mootools

window.addEvent('domready', function() {
    $$('#tabs div').hide();
    $$('#tabs div:first').show();
    $$('#tabs ul li:first').addClass('active');
    $$('#tabs ul li a').addEvent('click', function(event) {
        $$('#tabs ul li').removeClass('active');
        $$(this).parent().addClass('active'); 
        var currentTab = $(this).attr('href'); 
        $$('#tabs div').hide();
        $$(currentTab).show();
        return false;

    });
});

但我收到错误:$$(this).parent is not a function

我该如何解决?

2 个答案:

答案 0 :(得分:2)

这很糟糕。许多不良做法和api差异。

window.addEvent('domready', function() {
    // cache what we will reuse into vars
    var tabs = document.id('tabs'), 
        divs = tabs.getElements('div'),
        // for loop
        len = divs.length,
        ii = 1;

    // hide all but the first one w/o extra lookups.
    for (;ii < len;++ii)
        divs[ii].hide();

    // first match
    tabs.getElement('ul li').addClass('active');

    // attach the events to all links
    tabs.getElements('ul li a').addEvent('click', function(event) {
        event && event.stop();

        tabs.getElement('ul li').removeClass('active');
        this.getParent().addClass('active'); 
        tabs.getElement(this.get('href')).show();
        return false;
    });
});

基本上,您需要考虑一些实践:

  • 缓存你的选择器,特别是重复的东西
  • 避免前往dom并从内存中工作
  • 使用普通的js数组循环或方法来避免额外的选择器,如:first或:last,你已经有了数据
  • 直接停止活动,不要返回false
  • .getElement()将返回第一场比赛
  • 避免将内容存储到您不会重复使用的变量中
  • 考虑使用事件委派并将点击处理程序附加到ul而不是所有子A - 例如,tabs.getElement('ul').addEvent('click:relay(li a)', fn)将实现相同但仅创建单个事件处理程序

答案 1 :(得分:0)

mootools中没有parent方法,相反,方法名称为getParent。从jquery转换为mootools并不困难。查看文档很有帮助。