首页  >  文章  >  web前端  >  ownerdocument是什么意思?它是怎么使用的

ownerdocument是什么意思?它是怎么使用的

伊谢尔伦
伊谢尔伦原创
2017-06-16 14:35:452607浏览

根据提供的原始 HTML 标记字符串,动态创建由 jQuery 对象包装的 DOM 元素。同时设置一系列的属性、事件等。

你可以传递一个手写的 HTML 字符串,或者由某些模板引擎或插件创建的字符串,也可以是通过 AJAX 加载过来的字符串。但是在你创建 input 元素的时会有限制,可以参考第二个示例。当然这个字符串可以包含斜杠 (比如一个图像地址),还有反斜杠。当你创建单个元素时,请使用闭合标签或 XHTML 格式。例如,创建一个 span ,可以用$("d1bf6d6a16954ade8a6284a8272d757c") 或 $("45a2772a6b6107b401db3c9b82c049c254bdf357c58b8a65c66d7c19c8e4d114") ,但不推荐 $("45a2772a6b6107b401db3c9b82c049c2")。在jQuery 中,这个语法等同于$(document.createElement("span")) 。

在jQuery 1.8中,通过$(html,props), 您可以使用任何jQuery对象的方法或插件。在此之前,你只能使用一个方法名的短名单,并有没有成文的方式添加到列表中。现在并不需要是一个列表,在所有!然而,请注意,这可能会导致你的代码的行为改变,如果插件添加后,有相同的名称作为HTML属性。

jQuery( html [, ownerDocument] )、jQuery( html, props )

如果传入的字符串参数看起来像一段HTML代码(例如,字符串中含有8ebb96c85fba4d534a08b24d31161451),jQuery则尝试用这段HTML代码创建新的DOM元素,并创建一个包含了这些DOM元素引用的jQuery对象。例如,下面的代码将把HTML代码转换成DOM元素并插入body节点的末尾:

$(&#39;<p id="test">My <em>new</em> text</p>&#39;).appendTo(&#39;body&#39;);

如果HTML代码是一个单独标签,例如,$('79d7c95122630a3791db16c5259dc98d')或$('3499910bf9dac5ae3c52d5ede73834855db79b134e9f6b82c0b36e0489ee08ed'),jQuery会使用浏览器原生方法document.createElement()创建DOM元素。如果是比单独标签更复杂的HTML片段,例如上面例子中的$('a374e8fbca0f3e3fc21d2ffd1906735cMy907fae80ddef53131f3292ee4f81644bnewd1c6776b927dc33c5d9114750b586338text94b3e26ee717c64999d7867364b1b4a3'),则利用浏览器的innerHTML机制创建DOM元素,这个过程由方法jQuery.buildFragment()和方法jQuery.clean()实现,相关内容分别在2.4节和2.5节介绍和分析。

第二个参数ownerDocument用于指定创建新DOM元素的文档对象,如果不传入,则默认为当前文档对象。

如果HTML代码是一个单独标签,那么第二个参数还可以是props,props是一个包含了属性、事件的普通对象;在调用document.createElement()创建DOM元素后,参数props会被传给jQuery方法.attr(),然后由.attr()负责把参数props中的属性、事件设置到新创建的DOM元素上。

参数props的属性可以是任意的事件类型(如“click”),此时属性值应该是事件监听函数,它将被绑定到新创建的DOM元素上;参数props可以含有以下特殊属性:val、css、html、text、data、width、height、offset,相应的jQuery方法:.val()、.css()、.html()、.text()、.data()、.width()、.height()、.offset()将被执行,并且属性值会作为参数传入;其他类型的属性则会被设置到新创建的DOM元素上,某些特殊属性还会做跨浏览器兼容(如type、value、tabindex等);可以通过属性名class设置类样式,但要用引号把class包裹起来,因为class是JavaScript保留字。例如,在下面的例子中,创建一个p元素,并设置类样式为“test”、设置文本内容为“Click me!”、绑定一个click事件,然后插入body节点的末尾,当点击该p元素时,还会切换类样式test:

$("<p/>", {  
   "class": "test",  
   text: "Click me!",  
   click: function(){  
     $(this).toggleClass("test");  
   }  
}).appendTo("body");

示例代码:

动态创建一个 p 元素(以及其中的所有内容),并将它追加到 body 元素中。在这个函数的内部,是通过临时创建一个元素,并将这个元素的 innerHTML 属性设置为给定的标记字符串,来实现标记到 DOM 元素转换的。所以,这个函数既有灵活性,也有局限性。

jQuery 代码:

$("<p><p>Hello</p></p>").appendTo("body");

描述:

创建一个 d5fd7aea971a85678ba271703566ebfd 元素必须同时设定 type 属性。因为微软规定 d5fd7aea971a85678ba271703566ebfd 元素的 type 只能写一次。

jQuery 代码:

// 在 IE 中无效: $("<input>").attr("type", "checkbox"); // 在 IE 中有效: $("<input type=&#39;checkbox&#39;>");

描述:

动态创建一个 p 元素(以及其中的所有内容),并将它追加到 body 元素中。在这个函数的内部,是通过临时创建一个元素,并将这个元素的 innerHTML 属性设置为给定的标记字符串,来实现标记到 DOM 元素转换的。所以,这个函数既有灵活性,也有局限性。

jQuery 代码:

$("<p>", {

  "class": "test",

  text: "Click me!",

  click: function(){

    $(this).toggleClass("test");

  }

}).appendTo("body");

描述:

创建一个 d5fd7aea971a85678ba271703566ebfd 元素,同时设定 type 属性、属性值,以及一些事件。

jQuery 代码:

$("<input>", {

  type: "text",

  val: "Test",

  focusin: function() {

    $(this).addClass("active");

  },

  focusout: function() {

    $(this).removeClass("active");

  }

}).appendTo("form");

jQuery( html, [ownerDocument] ) 的用途是通过 html 字符串创造相应的 node 节点,jQuery 分为了两种情况,一种是 html 是由一个标签组成的 html 字符串,比如

<span>I&#39;m a SPAN</span>

这时, jQuery 会使用正则表达式匹配出这个 tag 的 tag name ,然后使用

document.createElement( tagName )

来生成这个 node ,而对于多个标签(还包括单个标签的前后有空白字符串)的情况,会这么处理:

先用 document.createDocumentFragment 创建一个 documentFragment

然后 用 document.createElement('p') ,创建一个 p

然后再 p.innerHTML = html ,创建 html 字符串对应的 node 节点

然后从 p 中得到这些节点,并返回

以上是ownerdocument是什么意思?它是怎么使用的的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn