如何将一些样式应用于 JavaScript 的“节点”对象

Posted

技术标签:

【中文标题】如何将一些样式应用于 JavaScript 的“节点”对象【英文标题】:How can I apply some style to JavaScript's "node" object 【发布时间】:2012-11-16 13:22:39 【问题描述】:

想象一下,我有如下几个陈述:

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/

【问题讨论】:

java中将节点类型转换为元素是什么意思? 如果我可以在 JavaScript 中将“节点”对象转换为“元素”对象.. 不,你不能,而且它与 JavaScript 完全没有关系。您正在使用本机浏览器对象,而它们所做的基本上是一成不变的。 哦。将样式应用于“节点”对象怎么样? 就像Object.style.background="color image repeat attachment position" 确保你的对象真的被加载了 【参考方案1】:

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 代码,可以满足您的需求。但请注意:

    符合标准的浏览器也将空白视为节点。 IE 不将空格算作节点。

例如,如果您的 HTML 如下所示:

<div>
    <span>Hi</span>
</div>

标准规定您的 DOM 必须如下所示:

div +
    |---- text node (whitespace)
    '---- span +
               '---- text node (Hi)

但 IE 做了大多数人可能期望的事情:

div +
    '---- span +
               '---- text node (Hi)

这意味着你不能盲目地信任node.firstChild,而不检查它是否是你所期望的。

【讨论】:

感谢您的回复。这真的很有意义。您现在可以将我的问题级别为 0(因为它是-1)。我希望我的问题仍然有效。【参考方案2】:

有一些问题。

lastChild.previousSibling.firstChild 乱七八糟是怎么回事?所有这些都让你感到困惑。

那一堆乱七八糟的属性返回给你的是一个文本节点,而不是一个元素。

lastChild 给你"a line"previousSibling 得到&lt;i&gt; 标签,然后firstChild 返回"just"。您正在尝试将样式应用于文本节点,这是您无法做到的,您需要为元素设置样式。

您正在尝试将样式应用于nodeValue。那是一个字符串。您可以使用parentNode 从文本节点获取&lt;i&gt; 标记。

oDiv.lastChild.previousSibling.firstChild.parentNode.style.color = "#FF0000";

演示:http://jsfiddle.net/NTICompass/4mXrd/2/

【讨论】:

以上是关于如何将一些样式应用于 JavaScript 的“节点”对象的主要内容,如果未能解决你的问题,请参考以下文章

如何将样式应用于 SVG 元素数组

如何将样式应用于 HTML 子文档? [复制]

通过 WKWebView 应用于 Javascript 的样式表在模拟器上工作,在设备上失败

将样式应用于 kendoui listview 选定项目

将悬停样式应用于任何孩子但不是父母

如何将样式应用于 Android 应用程序的所有按钮