rte_xhtml.js
上传用户:simon2hong
上传日期:2021-11-18
资源大小:16746k
文件大小:4k
源码类别:

OA系统

开发平台:

C#

  1. ///////////////////////////////////////////////////////////////////////////
  2. //
  3. // Description:
  4. // Escape XHTML text
  5. //
  6. function escapeXHTML(str)
  7. {
  8. return str.replace(/[&]/g, "&")
  9.   .replace(/[<]/g, "&lt;")
  10.   .replace(/[>]/g, "&gt;")
  11.   ;
  12. }
  13. function escapeXHTMLAttribute(str)
  14. {
  15. return str.replace(/["]/g, "&quot;");
  16. }
  17. ///////////////////////////////////////////////////////////////////////////
  18. //
  19. // Description:
  20. // Return the XHTML attribute list (space separated) for the given element
  21. //
  22. // Notes:
  23. // The ignore list is a JavaScript Regular expression that matches those
  24. // attribute that should not be output.
  25. //
  26. function innerXHTMLAttributes(el, ignore)
  27. {
  28. // Start with an empty attribute list
  29. var str = '';
  30. // Output attributes for the element
  31. for (var i = 0; i < el.attributes.length; i++)
  32. {
  33. // Get this attribute
  34. var attr = el.attributes[i];
  35. // Only output if it has a value of type string
  36. if (attr.nodeValue && typeof(attr.nodeValue) == "string")
  37. {
  38. // and it's not one we want to ignore
  39. if (!ignore || attr.nodeName.toLowerCase().search(ignore) == -1)
  40. {
  41. // Output the attribute (space separated if necessary)
  42. if (str.length) str += ' ';
  43. str += attr.nodeName.toLowerCase();
  44. str += '="' + escapeXHTMLAttribute(attr.nodeValue) + '"';
  45. }
  46. }
  47. }
  48. // Return the resulting attribute string
  49. return str;
  50. }
  51. ///////////////////////////////////////////////////////////////////////////
  52. //
  53. // Description:
  54. // Get the inner XHTML from the supplied element.
  55. //
  56. // Return Value:
  57. // XHTML string
  58. //
  59. // Notes:
  60. // The ignore list is a JavaScript Regular expression that matches those
  61. // attribute that should not be output.
  62. //
  63. function innerXHTML(el, ignore)
  64. {
  65. // Default innerXTHML is empty
  66. var str = '';
  67. // Create a text range for the element we are converting to source
  68. var r2; var r = document.body.createTextRange();
  69. r.moveToElementText(el);
  70. // Scan the child nodes of this element.
  71. for (var i = 0; i < el.children.length; i++)
  72. {
  73. // Create a text range for this child node
  74. r2 = document.body.createTextRange();
  75. r2.moveToElementText(el.children[i]);
  76. // Set the end of our range to the start of this child node.
  77. // so that r.text contains all the text up to this element.
  78. r.setEndPoint("EndToStart", r2);
  79. str += escapeXHTML(r.text);
  80. // Emit the child node
  81. str += outerXHTML(el.children[i], ignore);
  82. // Now, reset the text range for the main element and then move
  83. // the start point of our range to the end of the element just
  84. // output in preperation for the next chunk of text (or last chunk
  85. // if this was the last child node)
  86. r.moveToElementText(el);
  87. r.setEndPoint("StartToEnd", r2);
  88. }
  89. // Output the HTML (if any) plus the last chunk of text (again, if any).
  90. // Note: if no child nodes existed, the r.text contains the entire text
  91. // however, if child nodes did exist, then r.text contains just the 
  92. return str + escapeXHTML(r.text);
  93. }
  94. ///////////////////////////////////////////////////////////////////////////
  95. //
  96. // Description:
  97. // Get the outer XHTML from the supplied element.
  98. //
  99. // Return Value:
  100. // XHTML string
  101. //
  102. // Notes:
  103. // The ignore list is a JavaScript Regular expression that matches those
  104. // attribute that should not be output.
  105. //
  106. function outerXHTML(el, ignore)
  107. {
  108. // First, get the attribute values
  109. var attrs = innerXHTMLAttributes(el, ignore);
  110. // And any inner XHTML
  111. var inner = innerXHTML(el, ignore);
  112. // Then build the tag. Note: We use the XML abbreviation if the element is empty
  113. return '<' + el.nodeName.toLowerCase()
  114. + (attrs.length ? ' ' + attrs : '')
  115. + (inner.length ? '>' + inner + '</' + el.nodeName.toLowerCase() + '>'
  116. : ' />');
  117. }