如何使用Mootools在循环中设置元素的唯一ID?

时间:2009-10-27 15:02:52

标签: javascript mootools

我需要使用类“tdresult”为表中的锚元素设置唯一的数字rel属性。我试图在循环中设置它们,但我不是很擅长Javascript,可能不会取消不良循环。

$$('.tdresult').each(function(chooseClass) {
    var ellen=chooseClass.getElements('a').length;
    var eli=chooseClass.getElements('a').each(function(el){
    for (i=0; i<ellen; i++){
    var elic=el.set('rel',i++);  //trying to set numeric ids for anchor els (from 0 to //max (ellen)
    }
    });
    chooseClass.addEvent('mouseenter', function(el) {
    infoGet(1,uniqueid); // function that sets the ajax request using unique id from loop
        }); 
});

有人可以告诉我怎么做吗?

3 个答案:

答案 0 :(得分:1)

如果我理解正确的问题,这应该做你想要的

var offset = 0;
$$('.tdresult').each(function(chooseClass) {
 chooseClass.getElements('a').each(function(el){
      el.set('rel',offset); 
      el.addEvent('mouseenter', function(uniqueid) {
         return function() {
           infoGet(1,uniqueid); 
         }
      }(offset)); 
      offset++
 });

});

offset随循环递增但在其外部声明。每次循环运行时,它都会增加相同的offset变量。之前的循环不是必需的。

但有一个问题......为什么要将rel属性设置为数字?请参阅http://www.w3schools.com/TAGS/att_a_rel.asp以获取有效值列表。另请注意,主流浏览器都没有使用此属性。 (史诗在每个人的标准支持上都失败了)

修改

我注意到你试图用事件监听器做什么。我已修改代码以使用事件处理程序将当前偏移量存储在闭包中。事件处理程序中的函数立即使用当前offset运行。在函数内部,这被称为uniqueid。然后该函数返回真实事件处理函数,但保持使用uniqueid变量(不是偏移量,但调用外部函数时的偏移值)。

答案 1 :(得分:1)

我不是百分百肯定我明白你在做什么,但看起来像你一样

  1. 查找每个a元素中的每个.tdresult元素
  2. 为每个
  3. rel属性添加唯一值
  4. 向每个使用rel属性
  5. 的人添加一个mouseenter事件

    如果您想存储唯一值,请尝试storeretrieve

    var unique_id = 0;
    $$('.tdresult a').each(function(el){
        el.store('unique_id',unique_id);
        el.addEvent('mouseenter', function(evt) {
            infoGet(1,this.retrieve('unique_id')); 
        });     
        unique_id++;
    });
    

    虽然我有可能误解了这个任务。

答案 2 :(得分:1)

这在mootools中要容易得多,因为每个都给你一个计数器,并且你在每个循环的闭包中你需要存储id。查看mooShell(激活控制台)

$$('td a').each(function(el, uId){
        el.addEvent('mouseenter', function() {
               infoGet(1, uId);
        });     
});