أدوات jQuery المساعدة والوظائف المفيدة
أدوات jQuery المساعدة والوظائف المفيدة
توفر jQuery مجموعة من الوظائف المساعدة التي تساعدك على أداء المهام الشائعة بكفاءة أكبر. يتم الوصول إلى هذه الوظائف مباشرة من خلال كائن $ أو jQuery ولا تتطلب محدد.
أدوات المصفوفات والكائنات
$.each() - التكرار على المصفوفات والكائنات
تقوم دالة $.each() بالتكرار على المصفوفات والكائنات، وتنفيذ دالة callback لكل عنصر.
<script>
// التكرار على مصفوفة
var fruits = ['apple', 'banana', 'orange'];
$.each(fruits, function(index, value) {
console.log(index + ': ' + value);
});
// النتيجة: 0: apple, 1: banana, 2: orange
// التكرار على كائن
var person = {
name: 'John',
age: 30,
city: 'New York'
};
$.each(person, function(key, value) {
console.log(key + ': ' + value);
});
// النتيجة: name: John, age: 30, city: New York
// مثال عملي: ملء قائمة
var colors = ['red', 'green', 'blue'];
var list = $('<ul></ul>');
$.each(colors, function(i, color) {
list.append('<li>' + color + '</li>');
});
$('#color-container').append(list);
</script>
$.map() - تحويل عناصر المصفوفة
تُنشئ دالة $.map() مصفوفة جديدة بنتائج استدعاء دالة على كل عنصر.
<script>
// تحويل مصفوفة
var numbers = [1, 2, 3, 4, 5];
var doubled = $.map(numbers, function(value) {
return value * 2;
});
console.log(doubled); // [2, 4, 6, 8, 10]
// استخراج خصائص من الكائنات
var users = [
{ name: 'John', age: 25 },
{ name: 'Jane', age: 30 },
{ name: 'Bob', age: 35 }
];
var names = $.map(users, function(user) {
return user.name;
});
console.log(names); // ['John', 'Jane', 'Bob']
// التصفية والتحويل معاً
var products = [
{ name: 'Laptop', price: 1000 },
{ name: 'Mouse', price: 25 },
{ name: 'Keyboard', price: 75 }
];
var expensiveItems = $.map(products, function(product) {
if (product.price > 50) {
return product.name;
}
});
console.log(expensiveItems); // ['Laptop', 'Keyboard']
</script>
$.grep() - تصفية عناصر المصفوفة
تقوم دالة $.grep() بتصفية المصفوفة بناءً على شرط معين.
<script>
// تصفية الأرقام
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var evenNumbers = $.grep(numbers, function(n) {
return n % 2 === 0;
});
console.log(evenNumbers); // [2, 4, 6, 8, 10]
// التصفية مع خيار العكس
var oddNumbers = $.grep(numbers, function(n) {
return n % 2 === 0;
}, true); // true يعكس التصفية
console.log(oddNumbers); // [1, 3, 5, 7, 9]
// مثال عملي: تصفية المهام المنجزة
var tasks = [
{ title: 'Buy groceries', completed: true },
{ title: 'Write report', completed: false },
{ title: 'Call client', completed: true },
{ title: 'Review code', completed: false }
];
var completedTasks = $.grep(tasks, function(task) {
return task.completed;
});
console.log(completedTasks.length + ' tasks completed');
</script>
أدوات النصوص
$.trim() - إزالة المسافات البيضاء
تقوم دالة $.trim() بإزالة المسافات البيضاء من بداية ونهاية النص.
<script>
var text = ' Hello World ';
var trimmed = $.trim(text);
console.log('|' + text + '|'); // | Hello World |
console.log('|' + trimmed + '|'); // |Hello World|
// مثال عملي: تنظيف إدخال المستخدم
$('#submit-btn').click(function() {
var username = $.trim($('#username').val());
var email = $.trim($('#email').val());
if (username === '') {
alert('اسم المستخدم لا يمكن أن يكون فارغاً');
return false;
}
// معالجة البيانات المنظفة
console.log('Username: ' + username);
console.log('Email: ' + email);
});
</script>
String.trim()، تضمن $.trim() التوافق مع المتصفحات القديمة.
أدوات البحث في المصفوفات
$.inArray() - إيجاد فهرس العنصر
تبحث دالة $.inArray() عن قيمة في مصفوفة وتُرجع فهرسها (أو -1 إذا لم توجد).
<script>
var fruits = ['apple', 'banana', 'orange', 'grape'];
console.log($.inArray('banana', fruits)); // 1
console.log($.inArray('mango', fruits)); // -1
// مثال عملي: التحقق من وجود العنصر
var selectedItems = ['item1', 'item3', 'item5'];
$('#add-item-btn').click(function() {
var itemId = $(this).data('item-id');
if ($.inArray(itemId, selectedItems) === -1) {
selectedItems.push(itemId);
console.log('تمت إضافة العنصر');
} else {
console.log('العنصر موجود بالفعل');
}
});
// التحقق من قيم متعددة
function hasAnyFruit(fruits) {
var searchFor = ['apple', 'pear'];
for (var i = 0; i < searchFor.length; i++) {
if ($.inArray(searchFor[i], fruits) !== -1) {
return true;
}
}
return false;
}
console.log(hasAnyFruit(fruits)); // true
</script>
أدوات فحص الأنواع
توفر jQuery عدة دوال للتحقق من أنواع المتغيرات.
<script>
// $.isArray() - التحقق من كون المتغير مصفوفة
console.log($.isArray([1, 2, 3])); // true
console.log($.isArray('string')); // false
// $.isFunction() - التحقق من كون المتغير دالة
console.log($.isFunction(function(){})); // true
console.log($.isFunction(123)); // false
// $.isNumeric() - التحقق من كون المتغير رقمياً
console.log($.isNumeric(123)); // true
console.log($.isNumeric('123')); // true
console.log($.isNumeric('abc')); // false
// $.isPlainObject() - التحقق من كون المتغير كائن بسيط
console.log($.isPlainObject({})); // true
console.log($.isPlainObject({a: 1})); // true
console.log($.isPlainObject(new Date())); // false
console.log($.isPlainObject([1, 2])); // false
// $.isEmptyObject() - التحقق من كون الكائن فارغاً
console.log($.isEmptyObject({})); // true
console.log($.isEmptyObject({a: 1})); // false
// مثال عملي: التحقق من صحة البيانات قبل AJAX
function sendData(data) {
if (!$.isPlainObject(data)) {
console.error('يجب أن تكون البيانات كائناً');
return;
}
if ($.isEmptyObject(data)) {
console.error('لا يمكن أن تكون البيانات فارغة');
return;
}
// إرسال البيانات
$.ajax({
url: '/api/save',
method: 'POST',
data: data
});
}
</script>
معالجة الكائنات
$.extend() - دمج الكائنات
تقوم دالة $.extend() بدمج محتويات كائنين أو أكثر معاً.
<script>
// دمج أساسي
var defaults = {
color: 'blue',
size: 'medium',
price: 100
};
var options = {
color: 'red',
discount: 10
};
var settings = $.extend({}, defaults, options);
console.log(settings);
// { color: 'red', size: 'medium', price: 100, discount: 10 }
// دمج عميق
var obj1 = {
a: 1,
b: {
c: 2,
d: 3
}
};
var obj2 = {
b: {
d: 4,
e: 5
},
f: 6
};
var merged = $.extend(true, {}, obj1, obj2); // true = دمج عميق
console.log(merged);
// { a: 1, b: { c: 2, d: 4, e: 5 }, f: 6 }
// مثال عملي: إعدادات الإضافة
function MyPlugin(element, options) {
this.settings = $.extend({}, MyPlugin.defaults, options);
this.element = $(element);
this.init();
}
MyPlugin.defaults = {
speed: 300,
effect: 'fade',
autoplay: false
};
MyPlugin.prototype.init = function() {
console.log('تم تهيئة الإضافة مع:', this.settings);
};
// الاستخدام
var plugin = new MyPlugin('#my-element', {
speed: 500,
autoplay: true
});
</script>
أدوات التحليل
$.parseJSON() و $.parseHTML()
<script>
// $.parseJSON() - تحليل نص JSON
var jsonString = '{"name":"John","age":30}';
var obj = $.parseJSON(jsonString);
console.log(obj.name); // John
console.log(obj.age); // 30
// $.parseHTML() - تحليل نص HTML إلى عقد DOM
var htmlString = '<div class="box"><p>Hello</p></div>';
var nodes = $.parseHTML(htmlString);
$('#container').append(nodes);
// مثال عملي: معالجة استجابة API
$.ajax({
url: '/api/user',
dataType: 'text', // استلام كنص
success: function(response) {
try {
var data = $.parseJSON(response);
displayUser(data);
} catch (e) {
console.error('استجابة JSON غير صالحة');
}
}
});
</script>
JSON.parse() الأصلية بدلاً من $.parseJSON()، لكن إصدار jQuery يوفر معالجة أفضل للأخطاء في المتصفحات القديمة.
أدوات متنوعة
$.now() - الحصول على الطابع الزمني الحالي
<script>
// الحصول على الطابع الزمني الحالي بالميلي ثانية
var timestamp = $.now();
console.log(timestamp); // مثلاً، 1635789456789
// مثال عملي: قياس الأداء
var startTime = $.now();
// تنفيذ عملية ما
for (var i = 0; i < 1000000; i++) {
// بعض العمل
}
var endTime = $.now();
var duration = endTime - startTime;
console.log('استغرقت العملية ' + duration + 'ms');
// منع التخزين المؤقت
function loadData() {
$.ajax({
url: '/api/data?t=' + $.now(), // منع التخزين المؤقت
success: function(data) {
console.log(data);
}
});
}
</script>
$.noop() - دالة فارغة
دالة فارغة يمكن استخدامها كبديل افتراضي.
<script>
// استخدام $.noop() كـ callback افتراضي
function processData(data, callback) {
callback = callback || $.noop;
// معالجة البيانات
console.log('جاري المعالجة...');
// تنفيذ الـ callback
callback();
}
// الاستدعاء بدون callback - لا يوجد خطأ
processData({name: 'John'});
// الاستدعاء مع callback
processData({name: 'Jane'}, function() {
console.log('تم!');
});
</script>
تمرين عملي
المهمة: إنشاء أداة لمعالجة البيانات تستخدم عدة أدوات jQuery مساعدة.
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<title>تمرين أدوات jQuery</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
.results {
background: var(--bg-light);
padding: 15px;
margin-top: 10px;
border-radius: 5px;
}
</style>
</head>
<body>
<h1>أداة معالجة البيانات</h1>
<button id="process-btn">معالجة البيانات</button>
<div id="results" class="results"></div>
<script>
$(document).ready(function() {
var users = [
{ name: ' John Doe ', age: 25, active: true },
{ name: 'Jane Smith', age: 30, active: false },
{ name: ' Bob Johnson ', age: 35, active: true },
{ name: 'Alice Brown', age: 28, active: true }
];
$('#process-btn').click(function() {
var startTime = $.now();
// تنظيف الأسماء باستخدام $.map و $.trim
var cleanedUsers = $.map(users, function(user) {
return $.extend({}, user, {
name: $.trim(user.name)
});
});
// تصفية المستخدمين النشطين باستخدام $.grep
var activeUsers = $.grep(cleanedUsers, function(user) {
return user.active;
});
// الحصول على أسماء المستخدمين النشطين
var activeNames = $.map(activeUsers, function(user) {
return user.name;
});
// حساب متوسط العمر
var totalAge = 0;
$.each(activeUsers, function(i, user) {
totalAge += user.age;
});
var avgAge = totalAge / activeUsers.length;
var endTime = $.now();
// عرض النتائج
var html = '<h3>النتائج:</h3>';
html += '<p>المستخدمون النشطون: ' + activeNames.join(', ') + '</p>';
html += '<p>متوسط العمر: ' + avgAge.toFixed(1) + '</p>';
html += '<p>وقت المعالجة: ' + (endTime - startTime) + 'ms</p>';
$('#results').html(html);
});
});
</script>
</body>
</html>
الملخص
توفر أدوات jQuery المساعدة وظائف قوية للمهام البرمجية الشائعة:
- المصفوفات/الكائنات: $.each(), $.map(), $.grep(), $.extend()
- النصوص: $.trim()
- البحث: $.inArray()
- فحص الأنواع: $.isArray(), $.isFunction(), $.isNumeric(), $.isPlainObject(), $.isEmptyObject()
- التحليل: $.parseJSON(), $.parseHTML()
- متنوعة: $.now(), $.noop()
تجعل هذه الأدوات المساعدة كودك أكثر إيجازاً ووضوحاً وتوافقاً مع المتصفحات المختلفة. في الدرس التالي، سنستكشف أفضل ممارسات jQuery ونبني مشروعاً حقيقياً كاملاً!