jQuery היא ספרייה עוצמתית שמפשטת משימות כמו מניפולציה על DOM (Document Object Model). בין אם ברצונכם ליצור, לשנות או למחוק אלמנטים באופן דינמי, jQuery מאפשרת לעשות זאת בקלות וביעילות.
בפוסט הזה נסקור שיטות שונות של jQuery שיעזרו לכם לבצע מניפולציה על ה-DOM בצורה אפקטיבית, יחד עם טיפים לשיפור ביצועים.
בחירת אלמנטים
השלב הראשון בעבודה עם DOM הוא בחירת האלמנט המתאים. jQuery מספקת מנוע בחירה עוצמתי שדומה לסלקטורים של CSS.
// Select all paragraphs
$('p');
// Select an element by ID
$('#myElement');
// Select elements by class
$('.myClass');
// Select nested elements (e.g., all li within ul)
$('ul li');
באמצעות הסלקטורים האלו אפשר למקד כל חלק ב-HTML ולהחיל עליו פעולות נוספות.
הוספת אלמנטים חדשים
ניתן להוסיף אלמנטים חדשים ל-DOM בצורה דינמית בעזרת .append(), .prepend(), .after() ו-.before().
// Append a new paragraph to the end of a div
$('#myDiv').append('<p>This is a new paragraph.</p>');
// Prepend a heading to the beginning of a div
$('#myDiv').prepend('<h2>New Heading</h2>');
// Add content after an element
$('#myDiv').after('<p>This comes after the div.</p>');
// Add content before an element
$('#myDiv').before('<p>This comes before the div.</p>');
באמצעות השיטות האלה תוכלו להחליט היכן להוסיף תוכן חדש ב-DOM.
שינוי אלמנטים קיימים
jQuery מספקת שיטות רבות לשינוי תוכן ותכונות של אלמנטים. ניתן להשתמש ב-.html() להצגה או שינוי של תוכן HTML וב-.text() לטקסט רגיל.
// Set HTML content
$('#myDiv').html('<p>New HTML content here</p>');
// Set text content (will escape HTML)
$('#myDiv').text('This is plain text.');
// Change the value of an input field
$('#myInput').val('New value');
תוכלו גם לשנות תכונות כמו href ו-src או לנהל מחלקות עם .attr(), .addClass(), .removeClass() ו-.toggleClass().
// Change the href attribute of a link
$('a#myLink').attr('href', 'https://example.com');
// Add, remove, and toggle classes
$('#myDiv').addClass('highlight');
$('#myDiv').removeClass('old-class');
$('#myDiv').toggleClass('active');
ההבדל בין .attr() ל-.prop()
מקור בלבול נפוץ הוא ההבדל בין .attr() ל-.prop(). השתמשו ב-.attr() עבור תכונות HTML (הערכים שנכתבו ב-markup) וב-.prop() עבור מאפייני DOM (המצב החי של האלמנט).
// .attr() reads the HTML attribute
$('#myCheckbox').attr('checked'); // "checked" or undefined
// .prop() reads the current DOM property
$('#myCheckbox').prop('checked'); // true or false
// Use .prop() for boolean properties like checked, disabled, selected
$('#myCheckbox').prop('checked', true);
$('#myInput').prop('disabled', false);
ככלל אצבע: השתמשו ב-
.prop()עבורchecked,disabled,selectedו-readonly. השתמשו ב-.attr()עבור כל השאר כמוhref,src,data-*ו-title.
הסרת אלמנטים
כדי להסיר אלמנטים מ-DOM, השתמשו ב-.remove() או .empty(). הראשונה מסירה את האלמנט עצמו והשנייה רק את התוכן הפנימי שלו.
// Remove an element entirely
$('#myDiv').remove();
// Remove only the content inside an element
$('#myDiv').empty();
שימוש בשרשור לשיפור קריאות
jQuery תומכת בשרשור שיטות, מה שמאפשר לכתוב קוד נקי וקריא יותר על ידי הפעלת מספר פעולות על אותו אלמנט בשורה אחת.
// Instead of writing multiple separate lines
$('#myDiv').addClass('highlight');
$('#myDiv').attr('title', 'This is a title');
$('#myDiv').html('<p>New content here</p>');
// You can chain the methods together
$('#myDiv').addClass('highlight')
.attr('title', 'This is a title')
.html('<p>New content here</p>');
שרשור שיטות מסייע בהפחתת חזרות ויוצר קוד ממוקד ואלגנטי יותר.
התמודדות עם תוכן דינמי ואירועים
כאשר מוסיפים אלמנטים לדף לאחר טעינתו, אירועים שמחוברים ישירות אליהם לא יעבדו. לכן מומלץ להשתמש ב-.on() יחד עם event delegation.
// Direct binding - won't work for dynamically added elements
$('#myButton').click(function() {
alert('Button clicked!');
});
// Event delegation - attach to a static parent container
$('#button-wrapper').on('click', '#myButton', function() {
alert('Dynamically added button clicked!');
});
שימו לב שהקוד צריך לרוץ רק אחרי שה-DOM נטען במלואו. השתמשו ב-
$(document).ready()כדי להימנע משגיאות.
הצמידו את ה-listener למרכיב הורה סטטי קרוב – לא ל-$(document). חיבור הכל ל-document מכריח את jQuery לבדוק כל לחיצה בדף, מה שפוגע בביצועים בדפים מורכבים.
שיקולי ביצועים
jQuery מפשט מניפולציה על DOM, אבל שימוש לא זהיר עלול להאט את הדף. הנה מספר טיפים:
- שמרו סלקטורים במשתנים: אם אתם משתמשים באותו אלמנט יותר מפעם אחת, שמרו את הסלקטור במשתנה. כל קריאה ל-
$()מבצעת חיפוש מחדש ב-DOM. - בצעו עדכוני DOM בקבוצות: הימנעו מהוספת אלמנטים בתוך לולאה. בנו את מחרוזת ה-HTML המלאה קודם והוסיפו פעם אחת, או השתמשו ב-
.detach()כדי להסיר אלמנט, לשנות אותו מחוץ ל-DOM, ולהכניס מחדש. - השתמשו בסלקטורים ספציפיים: הימנעו מסלקטורים אוניברסליים כמו
$('*')או כאלה רחבים מדי כמו$(':input'). השתמשו ב-ID או בסלקטורי class ממוקדים במקום. - העדיפו CSS לעיצוב: אם צריך לשנות עיצוב של אלמנטים רבים, הוסיפו או החליפו class ב-CSS במקום להגדיר סגנונות inline עם
.css()על כל אלמנט בנפרד.
// Cache the selector
var $list = $('#myList');
// Build HTML outside the loop, then append once
var html = '';
for (var i = 0; i < items.length; i++) {
html += '<li>' + items[i] + '</li>';
}
$list.append(html);
שאלות נפוצות
שאלות נפוצות על מניפולציה של DOM באמצעות jQuery:
.html() מחזיר או מגדיר את ה-HTML הפנימי של אלמנט, כולל תגיות. .text() מחזיר או מגדיר רק את תוכן הטקסט - כל HTML שתעבירו אליו ייפלט כטקסט ליטרלי ולא יעובד כ-markup..prop() עבור מאפייני DOM בוליאניים כמו checked, disabled, selected ו-readonly. אלו משקפים את המצב החי של האלמנט. השתמשו ב-.attr() עבור תכונות HTML כמו href, src, data-* ו-title..click() מחובר רק לאלמנטים שקיימים ברגע שהקוד רץ. עבור אלמנטים שנוספים מאוחר יותר, השתמשו ב-event delegation עם .on() על ידי חיבור ה-listener לאלמנט הורה סטטי שכבר קיים ב-DOM.querySelectorAll(), classList ו-fetch() שמכסות הרבה מאותם מקרי שימוש ללא תלות נוספת..detach() שומר את כל הנתונים והאירועים שמחוברים לאלמנט. זה הופך את .detach() לאידיאלי כשמתכננים להכניס את האלמנט מחדש - לדוגמה, בעת ביצוע עדכוני DOM בקבוצות לשיפור ביצועים.סיכום
jQuery מספקת API תמציתי לבחירה, הוספה, שינוי והסרה של אלמנטים ב-DOM. שיטות כמו .append(), .html() ו-.attr() מטפלות ברוב משימות המניפולציה, בעוד ששרשור שיטות שומר על קוד נקי.
השתמשו ב-.prop() עבור מאפיינים בוליאניים וב-.attr() עבור תכונות HTML. הצמידו אירועים למרכיב הורה סטטי עם .on() במקום לחבר ישירות לאלמנטים דינמיים.
שמרו סלקטורים במשתנים, בצעו עדכוני DOM בקבוצות, והעדיפו מחלקות CSS על פני סגנונות inline כדי לשמור על ביצועים טובים בדפים מורכבים.
לרפרנס מלא, ראו את תיעוד ה-API הרשמי של jQuery.

