Javascript - Глюки в IE

Sparrow

Новичок
Javascript - Глюки в IE

Вопрос: нижеприведенный JS-код в Firefox корректно возвращает html-код, находящийся внутри тега с id='code'. В IE он возвращает строку '[object]'. Как с этим бороться?

Код:
function getSelectedHTML()
{
		
	var obText = (document.getElementById)? document.getElementById('code') : document.all.code;
	if (BXIsIE())
	{
		alert('html=' + obText.innerHTML); // displays '[object]'
		alert('value= '+obText.innerHTML.value); // displays 'undefined']
	}	
		
	return obText.innerHTML;
}
 

Sparrow

Новичок
Внутри тега obText - достаточно сложная структура (вытаскивается средствами php из БД).

-~{}~ 01.06.06 14:15:

obText.firstChild.nodeValue - тоже возвращает [object]
 

thujone

Новичок
Опиши подробней, что тебе вообще нужно делать с этими данными на клиенте ?

Для получения текстового представления узла может сгодится следующий кот:
(c) Google AJAXXSLT

Код:
// Returns the representation of a node as XML text.
function xmlText(node) {
  var ret = '';
  if (node.nodeType == DOM_TEXT_NODE) {
    ret += xmlEscapeText(node.nodeValue);
    
  } else if (node.nodeType == DOM_ELEMENT_NODE) {
    ret += '<' + node.nodeName;
    for (var i = 0; i < node.attributes.length; ++i) {
      var a = node.attributes[i];
      if (a && a.nodeName && a.nodeValue) {
        ret += ' ' + a.nodeName;
        ret += '="' + xmlEscapeAttr(a.nodeValue) + '"';
      }
    }

    if (node.childNodes.length == 0) {
      ret += '/>';

    } else {
      ret += '>';
      for (var i = 0; i < node.childNodes.length; ++i) {
        ret += arguments.callee(node.childNodes[i]);
      }
      ret += '</' + node.nodeName + '>';
    }
    
  } else if (node.nodeType == DOM_DOCUMENT_NODE || 
             node.nodeType == DOM_DOCUMENT_FRAGMENT_NODE) {
    for (var i = 0; i < node.childNodes.length; ++i) {
      ret += arguments.callee(node.childNodes[i]);
    }
  }
  
  return ret;
}


// Based on
// <[url]http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247[/url]>
var DOM_ELEMENT_NODE = 1;
var DOM_ATTRIBUTE_NODE = 2;
var DOM_TEXT_NODE = 3;
var DOM_CDATA_SECTION_NODE = 4;
var DOM_ENTITY_REFERENCE_NODE = 5;
var DOM_ENTITY_NODE = 6;
var DOM_PROCESSING_INSTRUCTION_NODE = 7;
var DOM_COMMENT_NODE = 8;
var DOM_DOCUMENT_NODE = 9;
var DOM_DOCUMENT_TYPE_NODE = 10;
var DOM_DOCUMENT_FRAGMENT_NODE = 11;
var DOM_NOTATION_NODE = 12;

// Escape XML special markup chracters: tag delimiter < > and entity
// reference start delimiter &. The escaped string can be used in XML
// text portions (i.e. between tags).
function xmlEscapeText(s) {
  return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
}

// Escape XML special markup characters: tag delimiter < > entity
// reference start delimiter & and quotes ". The escaped string can be
// used in double quoted XML attribute value portions (i.e. in
// attributes within start tags).
function xmlEscapeAttr(s) {
  return xmlEscapeText(s).replace(/\"/g, '&quot;');
}

// Escape markup in XML text, but don't touch entity references. The
// escaped string can be used as XML text (i.e. between tags).
function xmlEscapeTags(s) {
  return s.replace(/</g, '&lt;').replace(/>/g, '&gt;');
}
 

Sparrow

Новичок
Оказалось, что там совпадения имен на этапе переноса данных. Переименовал несколько переменных, и все заработало.

А нужное свойство - именно innerHTML
 
Сверху