سؤال

لقد حاولت تعيين InternalHTML على عنصر في Firefox وعمل بشكل جيد، وجربته في IE وحصلت على أخطاء غير متوقعة بدون سبب واضح.

على سبيل المثال، إذا حاولت تعيين HTML الداخلي للجدول على " hi from stu " فسوف يفشل، لأنه يجب أن يتبع الجدول تسلسل.

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

المحلول

وأضاف "يبدو فايرفوكس ليس هذا من الصعب إرضاءه" ==> ويبدو أن فايرفوكس هو عربات التي تجرها الدواب جدا، وأنه لا يتم تسجيل هذا الانتهاك الواضح من القواعد الأساسية-أتش تي أم أل التعشيش ...

وكما أشار شخص ما في منتدى آخر، وفايرفوكس تقبل، أن لإلحاق أتش تي أم أل المستند بأكمله وهو طفل من حقل النموذج أو حتى صورة، - (

نصائح أخرى

وأنت ترى أن السلوك بسبب HTML داخلي للقراءة فقط لعناصر الجدول في IE. من ثائق HTML داخلي الملكية :

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

وقراءة الخاصية / الكتابة لكافة الكائنات باستثناء ما يلي، والتي يتم قراءتها فقط: COL، COLGROUP، FRAMESET، الرأس، HTML، STYLE، الجدول، TBODY، TFOOT، THEAD، والعنوان، TR

لا أعرف لماذا كنت يجري كتكوت أسفل بالنسبة للسؤال ستو، وهذا شيء أنا حلها قريب جدا. هو خدعة ل"بخ" في HTML إلى عنصر DOM أن <م> لم يتم إرفاق حاليا إلى شجرة وثيقة . وفيما يلي مقتطف شفرة أن يفعل ما يلي:

// removing the scripts to avoid any 'Permission Denied' errors in IE
var cleaned = html.replace(/<script(.|\s)*?\/script>/g, "");

// IE is stricter on malformed HTML injecting direct into DOM. By injecting into 
// an element that's not yet part of DOM it's more lenient and will clean it up.
if (jQuery.browser.msie)
{
    var tempElement = document.createElement("DIV");
    tempElement.innerHTML = cleaned;
    cleaned = tempElement.innerHTML;
    tempElement = null;
}
// now 'cleaned' is ready to use...

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

وتحقق نطاق العنصر الذي تحاول تعيين HTML داخلي. منذ FF وIE التعامل مع هذه المسألة بطريقة مختلفة

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

وإلحاق بالنسبة لي لم يكن خيارا حتى لقد (النهاية) عملت بها هذه (والتي تعمل من أجل الفصل، FF وIE 8.0 (لم يحاول آخرون - ولكن يحدوني الأمل)).

replaceInReadOnly(document.getElementById("links"), "<a href>........etc</a>");

function replaceInReadOnly(element, content){
    var newNode = document.createElement();
    newNode.innerHTML = content;
    var oldNode = element.firstChild;
    var output = element.replaceChild(newNode, oldNode);
}

ويعمل بالنسبة لي - وآمل أن يعمل لك

هل حاولت وضع innerText و / أو textContent؟ وبعض العقد (مثل علامات SCRIPT) لا تتصرف كما هو متوقع عند محاولة تغيير HTML داخلي في IE. المزيد هنا حول innerText مقابل textContent:

<أ href = ل "http://blog.coderlab.us/2006/04/18/the-textcontent-and-innertext-properties/" يختلط = "noreferrer نوفولو"> http://blog.coderlab.us/2006/04/18 / للtextcontent و-innertext-خصائص /

هل وضع HTML داخلي مختلف تماما أو استبدال النمط في HTML داخلي؟ أنا أسأل لأنه إذا كنت تحاول القيام بعملية بحث تافهة / استبدال عن طريق "قوة" من HTML داخلي، وسوف تجد بعض أنواع عنصر لا تلعب في IE.

وهذه يمكن معالجتها بحذر المحيطة محاولة الخاص بك في محاولة / المصيد ومحتدما حتى DOM عبر parentNode حتى كنت تدير بنجاح للقيام بذلك.

ولكن هذا لن تكون مناسبة إذا كنت إدراج محتوى العلامة التجارية الجديدة.

ويمكنك تعديل السلوك. وفيما يلي بعض التعليمات البرمجية التي يمنع جمع القمامة من العناصر المشار إليها إلا في IE:

if (/(msie|trident)/i.test(navigator.userAgent)) {
 var innerhtml_get = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "innerHTML").get
 var innerhtml_set = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "innerHTML").set
 Object.defineProperty(HTMLElement.prototype, "innerHTML", {
  get: function () {return innerhtml_get.call (this)},
  set: function(new_html) {
   var childNodes = this.childNodes
   for (var curlen = childNodes.length, i = curlen; i > 0; i--) {
    this.removeChild (childNodes[0])
   }
   innerhtml_set.call (this, new_html)
  }
 })
}

var mydiv = document.createElement ('div')
mydiv.innerHTML = "test"
document.body.appendChild (mydiv)

document.body.innerHTML = ""
console.log (mydiv.innerHTML)

http://jsfiddle.net/DLLbc/9/

لقد اكتشفت للتو أنه إذا حاولت تعيين InnerHTML على عنصر في IE غير صحيح منطقيًا فسوف يؤدي إلى ظهور هذا الخطأ.على سبيل المثال، إذا حاولت تعيين HTML الداخلي للجدول على " مرحبًا من ستو "سوف يفشل، لأن الجدول يجب أن يتبعه تسلسل.يبدو أن متصفح فايرفوكس ليس بهذه الدرجة من الإرضاء.نأمل أن يساعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top