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

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

伊谢尔伦
伊谢尔伦原創
2017-06-16 14:35:452565瀏覽

根據提供的原始 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程式碼(例如,字串中含有ec5180a630281a7c410173383d141714),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片段,例如上述範例中的$('b78fed35e0c5c76e28c8a94634525662My907fae80ddef53131f3292ee4f81644bnewd1c6776b927dc33c5d9114750b586338text94b3e26ee717c64999d7867364b1b4a3'),則利用瀏覽器的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