0

我正在处理这种情况:

  • 我有一个以 id 为目标的彩色动画脚本(不是 JQuery,而是纯 javascript)
  • 然后我有一个没有 id 的动态列表:'ul' somePHP throwing list items '/ul'
  • 最后我有 JQuery 本身(我将使用它来动态添加几个 id 到列表项:但我仍然不知道如何)

我意识到我无法使用 JQuery 将单个类添加到列表项中,因为颜色插件仅按 id 搜索(它使用 getElementById,它与类不平行)。

我必须排除 addClass JQ 函数,它很容易投入使用。

只有当我可以在列表中插入 id、5 个明确定义的 id 并稍后在外部化颜色插件中给出一些指令以影响它们时,该脚本才会起作用:

<ul>
     <li><a href="" id="ontheflyone">pulled from the DB</a></li>
     <li><a href="" id="ontheflytwo">pulled from the DB</a></li>
     <li><a href="" id="ontheflythree">pulled from the DB</a></li>
     <li><a href="" id="ontheflyfour">pulled from the DB</a></li>
     <li><a href="" id="ontheflyfive">pulled from the DB</a></li>
</ul>

然后,说明:

document.getElementById(’id’).onmouseover = function() { 'ontheflyone','text','$color1' };
document.getElementById(’id’).onmouseout = function() { 'ontheflyone','text','$color2'};

document.getElementById(’id’).onmouseover = function() { 'ontheflytwo','text','$color1' };
document.getElementById(’id’).onmouseout = function() { 'ontheflytwo','text','$color2'};

etc.

我可以更改插件本身的 javascript,但我认为使用 JQuery 在我的 html 中以某种方式添加 id 会更容易。

颜色插件是由Michael Leigeber编写的一段很棒的代码, 我复制如下:

// main function to process the fade request //
function colorFade(id,element,start,end,steps,speed) {
  var startrgb,endrgb,er,eg,eb,step,rint,gint,bint,step;
  var target = document.getElementById(id);
  steps = steps || 20;
  speed = speed || 20;
  clearInterval(target.timer);
  endrgb = colorConv(end);
  er = endrgb[0];
  eg = endrgb[1];
  eb = endrgb[2];
  if(!target.r) {
    startrgb = colorConv(start);
    r = startrgb[0];
    g = startrgb[1];
    b = startrgb[2];
    target.r = r;
    target.g = g;
    target.b = b;
  }
  rint = Math.round(Math.abs(target.r-er)/steps);
  gint = Math.round(Math.abs(target.g-eg)/steps);
  bint = Math.round(Math.abs(target.b-eb)/steps);
  if(rint == 0) { rint = 1 }
  if(gint == 0) { gint = 1 }
  if(bint == 0) { bint = 1 }
  target.step = 1;
  target.timer = setInterval( function() { animateColor(id,element,steps,er,eg,eb,rint,gint,bint) }, speed);
}

// incrementally close the gap between the two colors //
function animateColor(id,element,steps,er,eg,eb,rint,gint,bint) {
  var target = document.getElementById(id);
  var color;
  if(target.step <= steps) {
    var r = target.r;
    var g = target.g;
    var b = target.b;
    if(r >= er) {
      r = r - rint;
    } else {
      r = parseInt(r) + parseInt(rint);
    }
    if(g >= eg) {
      g = g - gint;
    } else {
      g = parseInt(g) + parseInt(gint);
    }
    if(b >= eb) {
      b = b - bint;
    } else {
      b = parseInt(b) + parseInt(bint);
    }
    color = 'rgb(' + r + ',' + g + ',' + b + ')';
    if(element == 'background') {
      target.style.backgroundColor = color;
    } else if(element == 'border') {
      target.style.borderColor = color;
    } else {
      target.style.color = color;
    }
    target.r = r;
    target.g = g;
    target.b = b;
    target.step = target.step + 1;
  } else {
    clearInterval(target.timer);
    color = 'rgb(' + er + ',' + eg + ',' + eb + ')';
    if(element == 'background') {
      target.style.backgroundColor = color;
    } else if(element == 'border') {
      target.style.borderColor = color;
    } else {
      target.style.color = color;
    }
  }
}

// convert the color to rgb from hex //
function colorConv(color) {
  var rgb = [parseInt(color.substring(0,2),16), 
    parseInt(color.substring(2,4),16), 
    parseInt(color.substring(4,6),16)];
  return rgb;
}

所以,如果有人能告诉我如何即时添加这些 id,或者,也许,如何将 javascript 更改为目标类,一百万谢谢,

非常感谢,

4

2 回答 2

4

所以你有一个普通的<ul></ul>并想给<li>它一个唯一的ID?试试 jQuery 命令"each"

$("li").each(function(index, element){$(element).attr("id", index);});

这将遍历所有<li>元素并将每个元素的数字索引(在 jQuery 找到的元素数组中)分配为“id”属性。

于 2009-05-04T14:07:34.527 回答
2

如果您使用的是 jquery,您可以使用这样的语法按类获取元素(假设 css 类称为“className”:

$(".className").mouseover(function(){
  alert("something");
});

用 id 做同样的事情,你可以在 jquery 中这样做:

$("#idVal").mouseover(function(){
  alert("something");
});
于 2009-05-04T13:59:52.703 回答