jQuery: إضافة 5 معرفات على الطيران (بدلاً من الفصول)
-
03-07-2019 - |
سؤال
أنا أتعامل مع هذا الموقف:
- لديّ برنامج نصي للرسوم المتحركة الملونة يستهدف ID (إنه ليس jQuery ولكن JavaScript Pure)
- ثم لدي قائمة ديناميكية بدون معرفات: "UL" عناصر قائمة رمي Somephp "/UL"
- وأخيراً لدي jQuery نفسها (والتي سأستخدمها لإضافة عدة معرفات على متن عناصر القائمة: لكنني ما زلت لا أعرف كيف)
لقد أدركت أنه لا يمكنني إضافة ، مع jQuery ، فئات واحدة إلى عناصر القائمة ، حيث يبحث المكون الإضافي Color فقط عن طريق المعرف (يستخدم GetElementById ، والذي لا يوجد به موازٍ مع الفئات).
لا بد لي من استبعاد وظيفة addClass JQ ، والتي سيكون من السهل بما يكفي لوضعها في العمل.
سيعمل البرنامج النصي فقط إذا كان بإمكاني إدراج معرفات في القائمة ، و 5 معرفات محددة جيدًا ، وإعطاء لاحقًا بعض الإرشادات في المكون الإضافي للألوان الخارجية للتأثير عليها:
<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.
يمكنني تغيير جافا سكريبت المكون الإضافي نفسه ، لكنني اعتقدت أنه سيكون من الأسهل استخدام jQuery لإضافة ، بطريقة ما ، معرفات في HTML.
البرنامج المساعد الملون هو قطعة رمز رائعة كتبها مايكل ليغبيرأنا أعيد إنتاج على النحو التالي:
// 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;
}
لذا ، شكراً ، إذا كان بإمكان شخص ما أن يخبرني بكيفية إضافة تلك المعرفات على الطيران ، أو ربما كيفية تغيير JavaScript لاستهداف الفصول ،
شكرا جزيلا،
يناير
المحلول
لذلك لديك عادي <ul></ul>
وترغب في إعطاء كل <li>
فيه معرف فريد؟ جرب أمر jQuery "كل":
$("li").each(function(index, element){$(element).attr("id", index);});
هذا سوف يحلق على كل شيء <li>
العناصر وتعيين كل عنصر مؤشره العدد (في مجموعة من العناصر التي وجدتها jQuery) كسممة "ID".
نصائح أخرى
إذا كنت تستخدم jQuery ، فيمكنك الحصول على عنصر حسب الفصل باستخدام Syntax مثل هذا (على افتراض أن فئة CSS تسمى "classname":
$(".className").mouseover(function(){
alert("something");
});
لفعل الشيء نفسه مع معرف ستفعل هذا في jQuery:
$("#idVal").mouseover(function(){
alert("something");
});