باستخدام علامات HTML في جافا سكريبت السلاسل مع الامتثال W3C القواعد

StackOverflow https://stackoverflow.com/questions/1812773

سؤال

هنا هو بلدي رمز:

<a href="#">
    <img src="myimage.jpg" 
     onmouseover="showDescription(
          'Text', 'Text with HTML tags in them<br />More text');" 
     onmouseout="revertDescription();" 
     alt="Image description">

W3C Markup Validator لا يحب هذا.لا أريد علامات HTML داخل بلدي شفرة جافا سكريبت.وهنا رسالة الخطأ وتنتج إن محاولة هذا:

حرف "<"هو أول حرف من محدد ولكن كما حدث البيانات

كيف يمكنني إصلاح هذا في حين التأكد من أن صفحتي لا تفسد إذا مررت علامة HTML التي تحتوي على سلسلة document.getElementById('myElement').innerHTML?

هل كانت مفيدة؟

المحلول

onmouseover="showDescription('Text', 'Text with HTML tags in them<br />More text');" 

وكما هو الحال مع كل قيم السمات، يجب عليك HTML ترميز &، <، والمحدد السمة (" هنا). والحقيقة أنه من جافا سكريبت داخل قيمة السمة لا فرق. يتم فك قيمة السمة HTML قبل يحصل جافا سكريبت نظرة على ذلك.

onmouseover="showDescription('Text', 'Text with HTML tags in them&lt;br />More text');" 

وهذا هو على النقيض من عنصر <script>، محتوياتها CDATA وبالتالي لا & هرب في HTML4. في XHTML وجود عناصر CDATA. يمكنك إضافة قسم <![CDATA[ لجعل XHTML تتصرف نفسه، ولكن انها عادة ما تكون أسهل لكلا العنصرين النصي والصفات معالج الحدث لمجرد تجنب المشكلة عن طريق أبدا باستخدام & أو < الحرف. في سلسلة حرفية هروب آخر متوفر التي يمكنك استخدامها للالتفاف على هذا:

onmouseover="showDescription('Text', 'Text with HTML tags in them\x3Cbr />More text');" 

نصائح أخرى

هل يمكن أن التفاف المهام الخاصة بك داخل علامات <script>...</script> منفصلة في مكان آخر في الوثيقة، وهناك استخدام ...

<script>
//<![CDATA[
    ...code...
//]]>
</script>

http://javascript.about.com/library/blxhtml.htm:

<اقتباس فقرة>   

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

     

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

هناك العديد من الطرق للوصول إلى هناك.

  1. استخدام &#60; أو &lt; بدلا من <
    استخدام &#62; أو &gt; بدلا من >
  2. الحصول على معرف الصورة ، مثل "image1 و" ، ثم document.getElementById("image1").onmouseover = showDescription(
    'Text', 'Text with HTML tags in them<br />More text');

نأمل أن يعمل هذا.

واستبدال < التي كتبها %3C و> التي كتبها %3E واستخدام تفادي استبعاد عند إخراج محتوياته.

وهذا لن تحقق:

function(){
return ('<b> bold </b>');
}

وهذا يعطي نفس النتائج ويؤكد:

function(){
return unescape('%3Cb%3E bold %3C/b%3E'); 
}

وماذا عن وضع هذا ضمن

scroll top