我最近有一个功能,将xml 转为jquery dom,但是我使用XMLDOM Plugin,解决了我的问题,但我又遇到有一个问题,我调用html() 方法时,为null,
我明白,因为html() 时调用javascriopt innerhtml方法,因为这个是xml 所以为null,这个好正常,问题代码:
var xml = ‘<xml><root><item>gdf</item></root></xml>’;
var xd = $.xmlDOM(xml);
xd.html() //为空,
所以我修改了这个插件,解决这个问题
代码如下:
- (function ($) {
- function mnpXml(opCode, xmlStr) {
- return this.each(function () {
- if (typeof xmlStr != “string”) return;
- if (!jQuery.isXMLDoc(this)) return;
- var node = $.xmlDOM(xmlStr).firstChild.cloneNode(true);
- switch (opCode) {
- case “append”:
- this.appendChild(node);
- break;
- case “prepend”:
- if (this.childNodes.length > 0)
- this.insertBefore(node, this.firstChild);
- else
- this.appendChild(node);
- break;
- case “after”:
- if (this.nextSibling)
- this.parentNode.insertBefore(node, this.nextSibling);
- else
- this.parentNode.appendChild(node);
- break;
- case “before”:
- this.parentNode.insertBefore(node, this);
- break;
- }
- });
- }
- $.fn.extend({
- appendXml: function (s) {
- return mnpXml.call(this, “append”, s);
- },
- prependXml: function (s) {
- return mnpXml.call(this, “prepend”, s);
- },
- afterXml: function (s) {
- return mnpXml.call(this, “after”, s);
- },
- beforeXml: function (s) {
- return mnpXml.call(this, “before”, s);
- },
- xml: function () {
- var elem = this[0];
- return elem.xml || (new XMLSerializer()).serializeToString(elem);
- },
- innerXml: function () {
- var s = this.xml();
- var i = s.indexOf(“>”), j = s.lastIndexOf(“<”);
- if (j > i)
- return s.substring(i + 1, j);
- else
- return “”;
- }
- });
- $.extend(jQuery, {
- xmlDOM: function (xmlStr) {
- if (window.ActiveXObject) {
- var xd = new ActiveXObject(“Microsoft.XMLDOM”);
- xd.async = false;
- xd.loadXML(xmlStr);
- return xd;
- }
- else if (typeof DOMParser != “undefined”) {
- var xd = new DOMParser().parseFromString(xmlStr, “text/xml”);
- return xd;
- }
- else return null;
- },
- toXml: function (obj, nodeName, useAttr) {
- var x = $($.xmlDOM(“<” + nodeName + ” />”));
- var n = x.find(“:first”);
- for (var p in obj) {
- if (useAttr)
- n.attr(p, obj[p]);
- else
- n.appendXml(“<” + p + ” />”).find(p).text(obj[p]);
- }
- return x[0];
调用:
- $(document).ready(function () {
- var xml = ‘<xml><root><item>gdf</item></root></xml>’;
- var xd = $.xmlDOM(xml);
- // var x = $(xd);
- // x.find(“center”).appendXml(“<bottom />”).prependXml(“<top />”);
- // x.find(“top,bottom”).afterXml(“<After />”).beforeXml(“<Before />”);
- // alert(x.xml());
- // var obj = { Name: “Darkthread”, Score: 100 };
- // xd = $.toXml(obj, “Person”);
- // alert($(xd).xml());
- // xd = $.toXml(obj, “Person”, true);
- alert($(xd).xml());
我最近有一个功能,将xml 转为jquery dom,但是我使用XMLDOM Plugin,解决了我的问题,但我又遇到有一个问题,我调用html() 方法时,为null,
我明白,因为html() 时调用javascriopt innerhtml方法,因为这个是xml 所以为null,这个好正常,
问题代码:
var xml = ‘<xml><root><item>gdf</item></root></xml>’;
var xd = $.xmlDOM(xml);
xd.html() //为空,
所以我修改了这个插件:
代码如下:
- (function ($) {
- function mnpXml(opCode, xmlStr) {
- return this.each(function () {
- if (typeof xmlStr != “string”) return;
- if (!jQuery.isXMLDoc(this)) return;
- var node = $.xmlDOM(xmlStr).firstChild.cloneNode(true);
- switch (opCode) {
- case “append”:
- this.appendChild(node);
- break;
- case “prepend”:
- if (this.childNodes.length > 0)
- this.insertBefore(node, this.firstChild);
- else
- this.appendChild(node);
- break;
- case “after”:
- if (this.nextSibling)
- this.parentNode.insertBefore(node, this.nextSibling);
- else
- this.parentNode.appendChild(node);
- break;
- case “before”:
- this.parentNode.insertBefore(node, this);
- break;
- }
- });
- }
- $.fn.extend({
- appendXml: function (s) {
- return mnpXml.call(this, “append”, s);
- },
- prependXml: function (s) {
- return mnpXml.call(this, “prepend”, s);
- },
- afterXml: function (s) {
- return mnpXml.call(this, “after”, s);
- },
- beforeXml: function (s) {
- return mnpXml.call(this, “before”, s);
- },
- xml: function () {
- var elem = this[0];
- return elem.xml || (new XMLSerializer()).serializeToString(elem);
- },
- innerXml: function () {
- var s = this.xml();
- var i = s.indexOf(“>”), j = s.lastIndexOf(“<”);
- if (j > i)
- return s.substring(i + 1, j);
- else
- return “”;
- }
- });
- $.extend(jQuery, {
- xmlDOM: function (xmlStr) {
- if (window.ActiveXObject) {
- var xd = new ActiveXObject(“Microsoft.XMLDOM”);
- xd.async = false;
- xd.loadXML(xmlStr);
- return xd;
- }
- else if (typeof DOMParser != “undefined”) {
- var xd = new DOMParser().parseFromString(xmlStr, “text/xml”);
- return xd;
- }
- else return null;
- },
- toXml: function (obj, nodeName, useAttr) {
- var x = $($.xmlDOM(“<” + nodeName + ” />”));
- var n = x.find(“:first”);
- for (var p in obj) {
- if (useAttr)
- n.attr(p, obj[p]);
- else
- n.appendXml(“<” + p + ” />”).find(p).text(obj[p]);
- }
- return x[0];
调用:
- $(document).ready(function () {
- var xml = ‘<xml><root><item>gdf</item></root></xml>’;
- var xd = $.xmlDOM(xml);
- // var x = $(xd);
- // x.find(“center”).appendXml(“<bottom />”).prependXml(“<top />”);
- // x.find(“top,bottom”).afterXml(“<After />”).beforeXml(“<Before />”);
- // alert(x.xml());
- // var obj = { Name: “Darkthread”, Score: 100 };
- // xd = $.toXml(obj, “Person”);
- // alert($(xd).xml());
- // xd = $.toXml(obj, “Person”, true);
- alert($(xd).xml());
