dom解析html
『壹』 js怎麼解析帶有html的數據
一般可以用原生js及jQuery獲取html元素的值。
1
<div id="test">數值</div>
原生js寫法:
alert(document.getElementById('test').innerHTML);//數值
jQuery寫法:
alert($('#test').html());//數值
說明:
innerHTML是取元素的內部html代碼,此例中即div內部的所有html代碼
html()方法作用也是取dom節點的內部html內容,是jQuery中的函數方法
『貳』 在JS的腳本里,怎麼把一個html字元串轉成的DOM對象.從而能使用返回的DOM對象來訪問某一個節點
你的這個javascript腳本通常會在一個HTML頁面裡面運行。所以如果你的字元串裡面沒有<html>標簽專,直接就是內容<input type='text' value='123' id='test'>,那麼屬可以通過doucment.createElement創建一個div,然後把這個div的innerHTML設置成你的字元串。再把這個div append到doucmnet下面人任何一個元素里(通常就是body元素),這樣就可以document.getElementById來獲取了。用完之後如果不需要了,再從dom tree里把這個元素移除掉,或者就把這個div設置為display="None"就好
但是如果這個字元串是完整的HTML,包括<html><head><body>等標簽,那麼就需要創建一個新的iframe,把這個iframe的innerHTML設置成你的字元串,然後通過iframe的document的getElementById來獲取。
『叄』 如何將HTML String 轉換為 dom 元素
前一段時間因為需求,所以把這方面的資料自己查詢規整了一下,以備後用。
DOMParser
對於開發者來說,我們"期盼"的最好的方式當然是原生的瀏覽器支持,就像下面這樣
1: var parser = new DOMParser();
2: var doc = parser.parseFromString("<input />", "text/html");
Tips:
parseFromString 返回的並不僅僅是一個 input 元素的 node, 而是一個完整的 Document
這里是支持 script 標簽的, 但是當解析出的 dom 被添加到頁面時,script是不會被執行的
最好保證格式良好,否則可能並不會展現如我們預期的 dom 結構
遺憾的是,DOMParser 對 HTML 的解析僅僅得到了 Firefox 12+, IE 10+ 的支持,其餘的瀏覽器均不支持,所以我們要尋求瀏覽器兼容性更好的方法
InnerHTML
用 javascript 寫一個簡易的 parser 其實並不是很難,基本的雛形就像下面這樣
1: (function (DOMParser) {
2: "use strict";
3:
4: var
5: DOMParser_proto = DOMParser.prototype,
6: real_parseFromString = DOMParser_proto.parseFromString;
7:
8: // Firefox/Opera/IE throw errors on unsupported types
9: try {
10: // WebKit returns null on unsupported types
11: if ((new DOMParser).parseFromString("", "text/html")) {
12: // text/html parsing is natively supported
13: return;
14: }
15: } catch (ex) {}
16:
17: DOMParser_proto.parseFromString = function (markup, type) {
18: if (/^\s*text\/html\s*(?:;|$)/i.test(type)) {
19: var
20: doc = document.implementation.createHTMLDocument("");
21: if (markup.toLowerCase().indexOf('<!doctype') > -1) {
22: doc.documentElement.innerHTML = markup;
23: } else {
24: doc.body.innerHTML = markup;
25: }
26: return doc;
27: } else {
28: return real_parseFromString.apply(this, arguments);
29: }
30: };
31: }(DOMParser));
真正在使用時,我們可能不希望返回的是一個完整的 Document, 而僅僅是一個 html 片段,那採用下面的代碼也許更方便
1: function parseStringToHTML(text) {
2: var i, a = document.createElement("div"),
3: b = document.createDocumentFragment();
4: a.innerHTML = text;
5: while (i = a.firstChild) b.appendChild(i);
6: return b;
7: }
『肆』 瀏覽器是怎麼把html文檔解析成DOM結構的
瀏覽器解析html的過程如下:
HTML解析器的工作是解析HTML標記到解析樹
1)HTML語法定義
HTML的詞彙與句法定義在w3c組織創建的規范中。當前版本是HTML4,HTML5的工作正在進行中。
2)不是上下文無關語法
在對解析器的介紹中看到,語法可以用類似BNF的格式規范地定義。不幸的是所有常規解析器的討論都不適用於HTML(我提及它們並不是為了娛樂,它們可以用於解析CSS和JavaScript)。HTML無法用解析器所需的上下文無關的語法來定義。過去HTML格式規范由DTD (Document Type Definition)來定義,但它不是一個上下文無關語法。
HTML與XML相當接近。XML有許多可用的解析器。HTML還有一個XML變種叫XHTML,那麼它們主要區別在哪裡呢?區別在於HTML應用更加」寬容」,它容許你漏掉一些開始或結束標簽等。它整個是一個「軟」句法,不像XML那樣嚴格死板。 總的來說這一看似細微的差別造成了兩個不同的世界。一方面這使得HTML很流行,因為它包容你的錯誤,使網頁作者的生活變得輕松。另一方面,它使編寫語法格式變得困難。所以綜合來說,HTML解析並不簡單,現成的上下文相關解析器搞不定,XML解析器也不行。
3)HTML DTD
HTML的定義使用DTD文件。這種格式用來定義SGML族語言,它包含對所有允許的元素的定義,包括它們的屬性和層級關系。如我們前面所說,HTML DTD構不成上下文無關語法。
DTD有幾種不同類型。嚴格模式完全尊守規范,但其它模式為了向前兼容可能包含對早期瀏覽器所用標簽的支持。當前的嚴格模式DTD:http://www.w3.org/TR/html4/strict.dtd
4)DOM
解析器輸出的樹是由DOM元素和屬性節點組成的。DOM的全稱為:Document Object Model。它是HTML文檔的對象化描述,也是HTML元素與外界(如Javascript)的介面。
DOM與標簽有著幾乎一一對應的關系,如下:
<html>
<body>
<p>hello world</p>
<div><img src="aa.png"/></div>
</body>
</html>
『伍』 php DOMDocument 如何獲取html的數據,包括html的標簽在內,麻煩高手解答
沒人看的懂你的問題,首先要恭喜你你又懂了一些一般人不懂的問題,不多說了,
我看了DOMDocument 用來獲取xml的。如果要用PHP來解析html,可以用simple_html_dom,會jquery的話,看這個比較容易,具體用法,可以網路一下 php simple_html_dom。
希望對你有用。你的意思,我理解對了吧?
『陸』 html中DOM解析獲取子元素節點如何忽略空白
你可以根據節點類型來判斷,文本節點類型和其他節點類型是不一樣的,去回W3school查看一下,有一答個nodeType屬性。
參考網址:http://www.w3school.com.cn/htmldom/dom_properties.asp
『柒』 Android怎麼用dom解析HTML,HTML嵌套了這么多<div>節點,難道要一個一個子節點的找下去
參考一下這個。。。。
http://www.cfanz.cn/?c=article&a=read&id=29005
有類庫可回以幫你的。答