لماذا تذكر على وجه التحديد Textarea؟ لأن عقدة Textarea هي في الواقع خاصة جدا. لأن هذه العقدة خاصة ، فإن شرحها مختلف في IE والمتصفحات الأخرى.
توقف عن بيعه ، هاها! في الواقع ، السبب الرئيسي هو أنني ساعدت شقيق كبير في إصلاح خطأ اليوم. على وجه التحديد ، فشلت في سحب البيانات من الخادم وإدخالها في TextArea. هذا الموقف يحدث فقط في IE. جميع المتصفحات الأخرى طبيعية!
بادئ ذي بدء ، لماذا Textarea خاصة؟ في جميع الإضافات النماذج ، تتم كتابة قيمة textarea بين علامتين مفتوحتين ومغلقين ، بحيث يمكن اعتبار قيمتها عقدة نصية من منظور DOM ، وهو فريد من نوعه على Textarea. بسبب هذه الميزة ، عندما تقوم بتعديل قيمة innerhtml ، لا يزال بإمكانك تغيير نص textarea. على الرغم من أن IE يدعم القيام بذلك ، إلا أنه لا يسمح بشيء واحد: إدراج ديناميكي بعض علامات HTML.
قد تقوم أيضًا بتجربة:
أدخل قطعة من رمز HTML من خلال JS في IE ، باستخدام سمة InnerHTML بدلاً من القيمة أو النص الداخلي.
لم أختبر IE9+، لكن IE6 و 7 و 8 سوف يبلغ عن أخطاء.
ربما يكون ذلك لأسباب أمنية ، لذلك لا يُسمح لـ JS بإدراج HTML ديناميكيًا في Textarea ، ولكن يمكن للأشخاص الحرصين العثور على أنه إذا قمت بكتابة رمز HTML يدويًا ، فإن Textarea مقبول. أعتقد أن هذا في الواقع مرت بعملية مثل هذه: هروب الشخصية. نعم ، هذا هو السبب الوحيد وراء نجاح رمز HTML اليدوي.
لذلك ، في رأيي ، نظرًا لأن العديد من Textareas لا تدعم عرض HTML ، فلماذا لا تزال بحاجة إلى استخدام سمة InnerHTML عند تشغيل JS؟ بمعنى آخر ، بغض النظر عما إذا كنت تقوم بإدراج رمز HTML ذي القيمة أو InnerHTML مع رمز HTML ، فلن يتم تحليله وعرضه (لذلك سيكون هناك محرر نصية غني بدلاً من Textarea). فلماذا لا تستخدم القيمة لتعيين قيمة textarea؟
لذلك أعتقد أن تحديد قيمة textarea لا ينبغي أن يكون من خلال InnerHTML (بالطبع من المستحيل أن تكون نصًا داخليًا بسبب Firefox) ، ولكن يجب تعيينه من خلال القيمة. هذا شيء يجب على المطورين الانتباه إليه. لأنني قرأت مؤخرًا بعض رموز أحذية الأطفال التي ترغب دائمًا في استخدام InnerHTML. في الواقع ، أعتقد أن هذا كل شيء عن المناسبات.