87,993
社区成员
发帖
与我相关
我的任务
分享
var s_width = $(window).width()>$(document).width()?$(window).width():$(document).width();
var s_height = $(window).height()>$(document).height()?$(window).height():$(document).height();
function show_msg(){
$(document.body).children("#cover").remove();
// var cover_html = '<div id="cover"></div>';
// var cover = $("#cover");
// cover.css({
// width:s_width + 'px',
// height:s_height + 'px',
// backgroundColor:'#000'
// })
var cover = '<div id="cover" style="width:'+s_width+'px;height:'+s_height+'px;background-color:#000;"></div>'
$(document.body).append(cover);
}
[/quote]
var cover = $("#cover");你还没把cover插入到页面里,直接通过选择器去选节点是选不到的。
这里的cover返回的是一个空的jquery对象,该对象里一个dom节点都没有,所以设置样式不起作用。。
[/quote]var cover = $(cover_html);那这样写是啥原因呢,cover_html应该就是一个字符串吧,为什么$()包一下就变成一个html元素了啊[/quote]
jQuery( html, attributes )
html
类型: String
一个单标记的HTML 元素字符串(例如 <div/> or <div></div>).
attributes
类型: PlainObject
访问新创建元素的属性,事件和方法。
Creating New Elements(创建新元素)
如果一个字符串做为一个参数传递个$(), jQuery 检查这个属性是否看上去像HTML (也就是, <tag ... > 之类的元素在这个字符串中)。如果没有, 这个字符串将被解释为选择器, 作为解析上下文。 但是如果该字符串是一个 HTML 代码片断,那么jQuery 就会根据它尝试创建一个新的 DOM 元素。然后jQuery对象创建并返回引用的这些元素。我们可以在这个对象上执行一些常用的jQuery方法:
$( "<p id='test'>My <em>new</em> text</p>" ).appendTo( "body" );
一个字符串显式解析成HTML,请使用$.parseHTML() 方法.
默认情况下,元素会被创建到加载了jQuery库文件的那个文档的.ownerDocument下。 元素被注入到一个不同的文档应使用那个文档创建,例如:$("<p>hello iframe</p>", $("#myiframe").prop("contentWindow").document).
在上面的例子中,当一个HTML比一个没有属性的简单标签复杂的时候,实际上,创建元素的处理是利用了浏览器的 .innerHTML 机制。特别说明,jQuery创建一个新的<div>元素,并且设置innerHTML属性为传入的HTML代码片段。当参数是一个单标签,就像 $( "<img />" ) 或 $( "<img>" ), $( "<a></a>" ) 或 $( "<a>" ),jQuery将使用javasrcipt原生的 .createElement()函数创建这个元素。
当传入一个复杂的html,一些浏览器可能不会产生一个完全复制HTML源代码所提供的DOM。正如前面提到的,jQuery使用的浏览器.innerHTML属性来解析传递的HTML并将其插入到当前文档中。在此过程中,一些浏览器过滤掉某些元素,如<html>, <title>, 或 <head>的元素。其结果是,被插入元素可能不是传入的原始的字符串。
不过,这些被过滤掉的标签有限的。有些浏览器可能不完全复制所提供的HTML源代码生成DOM。例如,Internet Explorer的版本8之前转换所有链接的href属性为绝对URL路径,和Internet Explorer第9版之前,不增加一个单独的兼容层的情况下,将无法正确处理HTML5元素。
为了确保跨平台的兼容性,代码片段必须是良好的。标签可以包含其他元素,但需要搭配的结束标记:
$( "<a href='http://jquery.com'></a>" );
标签不能包含元素可能很快封闭,当然也可以不这样做:
$( "<img>" );
$( "<input>" );
当传递HTML给jQuery()时,注意,文本节点不被视为DOM元素。 除了一些方法(如内容.content()),它们一般都被忽略或删除。例如:
var el = $( "<br>2<br>3" ); // returns [<br>, "2", <br>]
el = $( "<br>2<br>3 >" ); // returns [<br>, "2", <br>, "3 >"]
这是预期的结果。 从jQuery1.9.0开始(除非使用jQuery Migrate plugin(jQuery迁移插件)), jQuery()方法要求的HTML字符串是以一个<(小于号)开头的字符串(即文本节点不能出现在HTML字符串的前面)。
[/quote]
var cover = $("#cover");你还没把cover插入到页面里,直接通过选择器去选节点是选不到的。
这里的cover返回的是一个空的jquery对象,该对象里一个dom节点都没有,所以设置样式不起作用。。
[/quote]var cover = $(cover_html);那这样写是啥原因呢,cover_html应该就是一个字符串吧,为什么$()包一下就变成一个html元素了啊[/quote]
因为这样做一下,jquery会把你传入的html转换成一个还没有插入到页面中的节点,再构造自己的jquery对象。
说简单点就是,$('#cover')是选择器,选择页面上已经存在的节点,节点不存在,返回的jquery对象里是没有任何节点的。
$(cover)你传入的是一段html,返回的jquery对象里是有这个还没有插入到文档里的一个节点,在调用jquery的append后才会把这个节点插入到页面里,之前设置的样式也都还存在。
[/quote]
var cover = $("#cover");你还没把cover插入到页面里,直接通过选择器去选节点是选不到的。
这里的cover返回的是一个空的jquery对象,该对象里一个dom节点都没有,所以设置样式不起作用。。
[/quote]var cover = $(cover_html);那这样写是啥原因呢,cover_html应该就是一个字符串吧,为什么$()包一下就变成一个html元素了啊
[/quote]
var cover = $("#cover");你还没把cover插入到页面里,直接通过选择器去选节点是选不到的。
这里的cover返回的是一个空的jquery对象,该对象里一个dom节点都没有,所以设置样式不起作用。。
