用 Objective-C 操作 DOM

來簡單講講 Objective-C 怎麼操作 DOM。假如我們現在有一個簡單的 HTML 檔案:

<div id="main">
</div>

那麼,在 JavaScript 裡頭,我們會這樣取得 main 這個 div 的 DOM 物件:

var main = document.getElementById('main');

我們便可以把這段程式翻譯成 ObjC:

DOMDocument *document = [[webView mainFrame] DOMDocument];
DOMHTMLElement *main = (DOMHTMLElement *)[document getElementById:@"main"];

我們也可以用一些比較新的 API,例如 querySelector。

var main = document.querySelector('#main');
main.style.backgroundColor = '#AAA';
DOMDocument *document = [[webView mainFrame] DOMDocument];
DOMHTMLElement *main = (DOMHTMLElement *)[document querySelector:@"#main"];

假如我們想要在 main 這個 div 中,產生、並加入一個新的 child node,會這樣寫:

var main = document.getElementById('main');
var child = document.createElement('div');
child.innerHTML = 'child:' + (main.childElementCount + 1);
main.appendChild(child);

話說 childElementCount 也是一個比較新的 API,WebKit 要 4.0 之後才支援, Firefox 則是在 3.5 之後才支援。把上面那段程式翻譯成 ObjC 的話:

DOMDocument *document = [[webView mainFrame] DOMDocument];
DOMHTMLElement *main = (DOMHTMLElement *)[document
    getElementById:@"main"];
DOMHTMLElement *newElement = (DOMHTMLElement *)[document
    createElement:@"div"];
newElement.innerHTML = [NSString stringWithFormat:@"child:%d",
    main.childElementCount + 1];
[main appendChild:newElement];

如果要修改某個 HTML element 的 CSS 樣式,在 JavaScript 是這樣:

var main = document.getElementById('main');
main.style.backgroundColor = '#AAA';

用 Objective-C 寫是這樣:

DOMDocument *document = [[webView mainFrame] DOMDocument];
DOMHTMLElement *main = (DOMHTMLElement *)[document
    getElementById:@"main"];
DOMCSSStyleDeclaration *style = main.style;
[style setProperty:@"background-color" value:@"#AAA" priority:@""];
// 也可以寫成 [style setBackgroundColor:@"#AAA"];

results matching ""

    No results matching ""