2009-09-22 32 views
1

我正在学习Javascript和CSS,并遇到一个问题,我的CSS样式没有应用于标记,我从XML动态生成并在页面加载后写入文档。我只能假定这些样式没有被应用,因为我在文档被加载后修改了它。它是否正确?如果情况并非如此,您是否有任何想法了解为什么样式未被应用?CSS样式是否应用于页面加载后添加的标记?

这段JavaScript代码...

$(function() 
{ 
    //Dynamically generate markup 
    strMarkup = GenerateMarkupFromXML(); 

    //Display the dynamically generated markup 
    document.write(strMarkup); 
}); 

动态生成这种简单的标记......

<div id="accordion"><h3>Title1</h3><h3>Title2</h3></div> 

但这些款式永远不似乎被应用,<h3>标签一下就显示与默认的浏览器风格...

h3 
{ 
    background-color:#ccc; 
    color:#003300; 
    font-size:1.1em; 
} 

我还应该注意th当我将动态生成的标记直接粘贴到主体中时,样式会正确应用。

在此先感谢您的帮助!

回答

2

是...样式将应用于任何动态添加的标记。

您的代码的document.write()部分可能会导致问题。一般来说,只应在文档加载和解析时使用内联document.write()。如果你在DomReady上调用它,那么它会覆盖整个页面,我猜这是导致问题的原因。我还没有测试过。

我不是那熟悉的jQuery,但不是执行document.write()行尝试做沿东西线(未经测试):

$(“身体”)追加(” < DIV ID = “手风琴” > <H3>标题1/H3 > <H3>标题2 </H3 > < /格>“);

+0

是固定的,谢谢! – BeachRunnerFred 2009-09-22 21:37:09

1

是的,CSS样式应用于页面加载后添加的标记。

这可能是因为您实际上并没有生成与您认为相同的代码。尝试选择生成的代码并在Firefox中执行“查看选择源代码”。这会向您显示生成的源代码(即,不仅仅是加载页面时提供的静态内容)。

编辑

我觉得这是与使用document.write()在文档准备功能的问题..似乎导致某种无限循环的(我在Firefox,浏览器会将纺纱该选项卡上的加载图标,即使该文件位于本地计算机上)。 $('body').append(strMarkup);solution posted by Andy工程,虽然,$('body').html(strMarkup);;

2

是的,CSS自动应用。你的例子不工作,因为document.write是邪恶的) 它使用你的自定义样式重写整个文档,我建议。如果您想使用document.write,请在文档的适当部分调用它,而不是在头部。例如:

<头> <风格> H3 { 背景色:#CCC; 颜色:#003300; font-size:1.1em; } < /风格> < /头> <体> <脚本> 文件撰写(” < DIV ID = “手风琴”> < H3>标题1 </H3> < H3>标题2 </H3> </div>'); </SCRIPT> </BODY>

相关问题