我写一个遮罩层的功能,发现样式拼接在html里有效果,但拿出来单独写就没效果了,代码放下面

HelloBitches 2016-02-18 03:15:10


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);
}
...全文
295 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
业余草 2016-02-18
  • 打赏
  • 举报
回复
这个很简单,你把$(document.body).children("#cover").remove();删掉了 这是再用jquery去查找#cover就会找不到,因为这时#cover还未创建! 赶紧结贴了吧,兄弟
天际的海浪 2016-02-18
  • 打赏
  • 举报
回复
引用 5 楼 qq317423553 的回复:
[quote=引用 4 楼 functionsub 的回复:] [quote=引用 3 楼 qq317423553 的回复:] [quote=引用 2 楼 jslang 的回复:] var cover_html = '<div id="cover"></div>'; var cover = $(cover_html); cover.css({ width:s_width + 'px', height:s_height + 'px', backgroundColor:'#000' })
解释下原因呗朋友,你都第几次回答我的问题了,谢谢了[/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字符串的前面)。
functionsub 2016-02-18
  • 打赏
  • 举报
回复
引用 5 楼 qq317423553 的回复:
[quote=引用 4 楼 functionsub 的回复:] [quote=引用 3 楼 qq317423553 的回复:] [quote=引用 2 楼 jslang 的回复:] var cover_html = '<div id="cover"></div>'; var cover = $(cover_html); cover.css({ width:s_width + 'px', height:s_height + 'px', backgroundColor:'#000' })
解释下原因呗朋友,你都第几次回答我的问题了,谢谢了[/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后才会把这个节点插入到页面里,之前设置的样式也都还存在。
HelloBitches 2016-02-18
  • 打赏
  • 举报
回复
引用 4 楼 functionsub 的回复:
[quote=引用 3 楼 qq317423553 的回复:] [quote=引用 2 楼 jslang 的回复:] var cover_html = '<div id="cover"></div>'; var cover = $(cover_html); cover.css({ width:s_width + 'px', height:s_height + 'px', backgroundColor:'#000' })
解释下原因呗朋友,你都第几次回答我的问题了,谢谢了[/quote] var cover = $("#cover");你还没把cover插入到页面里,直接通过选择器去选节点是选不到的。 这里的cover返回的是一个空的jquery对象,该对象里一个dom节点都没有,所以设置样式不起作用。。 [/quote]var cover = $(cover_html);那这样写是啥原因呢,cover_html应该就是一个字符串吧,为什么$()包一下就变成一个html元素了啊
functionsub 2016-02-18
  • 打赏
  • 举报
回复
引用 3 楼 qq317423553 的回复:
[quote=引用 2 楼 jslang 的回复:] var cover_html = '<div id="cover"></div>'; var cover = $(cover_html); cover.css({ width:s_width + 'px', height:s_height + 'px', backgroundColor:'#000' })
解释下原因呗朋友,你都第几次回答我的问题了,谢谢了[/quote] var cover = $("#cover");你还没把cover插入到页面里,直接通过选择器去选节点是选不到的。 这里的cover返回的是一个空的jquery对象,该对象里一个dom节点都没有,所以设置样式不起作用。。
HelloBitches 2016-02-18
  • 打赏
  • 举报
回复
引用 2 楼 jslang 的回复:
var cover_html = '<div id="cover"></div>'; var cover = $(cover_html); cover.css({ width:s_width + 'px', height:s_height + 'px', backgroundColor:'#000' })
解释下原因呗朋友,你都第几次回答我的问题了,谢谢了
天际的海浪 2016-02-18
  • 打赏
  • 举报
回复
var cover_html = '<div id="cover"></div>'; var cover = $(cover_html); cover.css({ width:s_width + 'px', height:s_height + 'px', backgroundColor:'#000' })
HelloBitches 2016-02-18
  • 打赏
  • 举报
回复
注释掉的是没有效果的,下面直接拼接的就可以 我不想这样拼接 太麻烦 也容易出错 该怎么做啊

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧