jQuery: كيفية الحصول على النص من القائمة المنسدلة (select) — تحليل كامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

هل سبق لك أن أمسكت بنفسك تفكر: "لماذا أحصل على value بينما أحتاج إلى النص؟"

\n\n

مرحبًا بكم في PythonLib! اليوم سنقوم بتحليل واحدة من أكثر المشكلات شيوعًا التي يواجهها كل من المبتدئين والمطورين ذوي الخبرة في الواجهة الأمامية. تقوم بإنشاء نموذج جميل، وتضيف قائمة منسدلة (select box)، وتكتب معالجًا باستخدام jQuery… وفجأة تدرك أنك لا تحتاج إلى value (رمز البلد الرقمي، معرف المنتج أو شيء من هذا القبيل)، بل تحتاج إلى نص قابل للقراءة البشرية يراه المستخدم في القائمة.

\n\n

هذا السؤال على Stack Overflow حصد آلاف المشاهدات وعشرات الإجابات. نحن لا ننسخ واحدة منها فقط — بل سنقوم بتفصيل المهمة، ونعرض عدة طرق للحل، ونقدم كودًا جاهزًا يمكنك إدراجه في مشروعك الآن. هيا بنا!

\n\n

المشكلة: value مقابل text

\n\n

تخيل كود HTML نموذجي:

\n\n
<select id="citySelect">\n    <option value="1">موسكو</option>\n    <option value="2">سانت بطرسبرغ</option>\n    <option value="3">نوفوسيبيرسك</option>\n</select>
\n\n

عندما يختار المستخدم "سانت بطرسبرغ"، فإن كود jQuery القياسي $('#citySelect').val() سيعيد "2". ولكن ماذا لو كنت بحاجة إلى عرض "سانت بطرسبرغ" بالضبط على الصفحة؟ أو إرسال اسم قابل للقراءة إلى التحليلات؟ هنا يبدأ سحر التنقل في DOM.

\n\n

الحل رقم 1: الطريقة التقليدية باستخدام .text()

\n\n

أبسط وأكثر طريقة بديهية هي الحصول على العنصر المحدد <option>، ثم استخراج محتواه النصي.

\n\n
$('#citySelect').on('change', function() {\n    var selectedText = $(this).find('option:selected').text();\n    console.log('لقد اخترت:', selectedText);\n});
\n\n

كيف يعمل هذا؟
\n$(this) — مرجع إلى عنصر select الخاص بنا (داخل معالج الحدث).
\n.find('option:selected') — نبحث بين option الفرعية عن تلك التي تحتوي على السمة selected.
\n.text() — نستخرج النص النقي (بدون وسوم HTML).

\n\n

مكافأة: إذا كان لديك عدة عناصر select في الصفحة، استخدم class أو ID بدلاً من this.

\n\n

الحل رقم 2: استخدام .children() و .filter()

\n\n

أحيانًا يكون العمل عبر تصفية العناصر الفرعية أكثر ملاءمة. خاصة إذا كان لديك تداخل معقد أو وسوم مخصصة.

\n\n
$('#citySelect').on('change', function() {\n    var selectedText = $(this).children('option:selected').text();\n    // بديل باستخدام filter:\n    // var selectedText = $(this).children('option').filter(':selected').text();\n    alert('المدينة المختارة: ' + selectedText);\n});
\n\n

الفرق بين find() و children() هو أن children() ينظر فقط إلى التابعين المباشرين، بينما find() ينظر إلى جميع التابعين من أي مستوى. بالنسبة لـ select القياسي، هذا لا يهم، لكن من المفيد معرفته.

\n\n

الحل رقم 3: الحصول على النص عند تحميل الصفحة

\n\n

غالبًا ما تحتاج إلى عرض النص المحدد فورًا، دون انتظار حدث change. على سبيل المثال، عند تهيئة النموذج.

\n\n
$(document).ready(function() {\n    var initialText = $('#citySelect option:selected').text();\n    $('#selectedCityDisplay').text('المدينة الحالية: ' + initialText);\n});
\n\n

هذا الكود سيتم تنفيذه مرة واحدة عند تحميل DOM وسيكتب نص الخيار المحدد افتراضيًا في العنصر ذو ID selectedCityDisplay.

\n\n

الحل رقم 4: دالة مساعدة عامة

\n\n

إذا كنت تكتب تطبيقًا جادًا، فمن المنطقي استخراج المنطق إلى دالة منفصلة. بهذه الطريقة يصبح الكود أنظف وقابلًا لإعادة الاستخدام.

\n\n
function getSelectedText(selectId) {\n    return $('#' + selectId + ' option:selected').text();\n}\n\n// الاستخدام:\n$('#citySelect').on('change', function() {\n    var text = getSelectedText('citySelect');\n    co                

المدونات

توصيات الكتب