![](/img/trans.png)
[英]How can I override a method in Javascript and apply it to the original object, not a child?
[英]How can I apply some style to JavaScript's "node" object
想象一下,我有以下幾個陳述:
var n1 = oDiv.firstChild;
var n2 = oDiv.lastChild.previousSibling.firstChild; //know this crazy, but for knowledge sake
如何應用如下各種樣式(通常僅適用於“元素”類型而不適用於“節點”類型):
//does not work
n1.style.borderWidth = "1px";
n1.style.borderColor = "#336699";
n2.style.borderStyle = "solid";
另外,有沒有辦法在 JavaScript 中將“節點”類型轉換為“元素”?
更新:
我試圖在上面完成的代碼在這里http://jsfiddle.net/anthachetta/4mXrd/
DOM 的工作方式與 HTML 完全相同。 這是有道理的,因為 DOM 旨在將 HTML 建模為對象。 那么,如果您想將以下內容加粗,您會怎么做:
Hello World
從您的代碼中,您嘗試做的是這樣的:
style=font-weight:bold Hello World
顯然這是行不通的,因為它不是有效的 HTML。 你通常會做的是:
<span style='font-weight:bold;'>Hello World</span>
所以你需要在 DOM 中做同樣的事情:
// Assume you have a div "div" and the first child
// is the text node "Hello World"
var hello_world = div.firstChild;
// Now, you want to make Hello World bold.
// So you need to create a span:
var span = document.createElement('span');
span.style['font-weight'] = 'bold';
// Now wrap hello_world in the span:
span.appendChild(div.removeChild(hello_world));
以上是實際工作的 DOM 代碼,可以滿足您的需求。 但要注意:
例如,如果您的 HTML 如下所示:
<div>
<span>Hi</span>
</div>
標准說你的 DOM 必須是這樣的:
div +
|---- text node (whitespace)
'---- span +
'---- text node (Hi)
但 IE 做了大多數人可能期望的事情:
div +
'---- span +
'---- text node (Hi)
這意味着您不能盲目信任node.firstChild
而不檢查它是否符合您的期望。
有幾個問題。
lastChild.previousSibling.firstChild
是怎么lastChild.previousSibling.firstChild
? 所有這些都讓你感到困惑。
那些混亂的屬性正在返回一個文本節點,而不是一個元素。
lastChild
給你"a line"
, previousSibling
得到<i>
標簽,然后firstChild
返回"just"
。 您正在嘗試將樣式應用於文本節點,但您不能這樣做,您需要為元素設置樣式。
您正在嘗試將樣式應用於nodeValue
。 那是一個字符串。 您可以使用parentNode
從文本節點獲取<i>
標記。
oDiv.lastChild.previousSibling.firstChild.parentNode.style.color = "#FF0000";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.