为啥在使用 jquery 创建元素后它们在 Chrome 中不可见

Posted

技术标签:

【中文标题】为啥在使用 jquery 创建元素后它们在 Chrome 中不可见【英文标题】:Why after create elements with jquery they'r not visible in Chrome为什么在使用 jquery 创建元素后它们在 Chrome 中不可见 【发布时间】:2012-01-20 05:02:57 【问题描述】:

我正在使用 jQuery 以一种简单的方式创建元素。

所以它应该在文档准备好后工作,它在 IE 上运行良好,但不适用于 Chrome、Firefox 或 Safari。 它们已创建,但不可见!

例如,在 chrome 中,当我在文档准备好后包含警报时,单击确定后,元素变得可见,或者当我打开“检查元素”时元素也变得可见。

有谁知道问题出在哪里?

var radio_span = $('<span></span>')
 .addClass('jqTransformRadioWrapper')
 .attr('id', spanRadio_id) (...etc)

【问题讨论】:

请创建一个jsfiddle.net 演示来举例说明您的问题。单独的代码 sn-p 不足以解决或解决您的问题。例如,您发布的代码没有显示您如何将新元素添加到 DOM 树。如果不提供更多信息,就无法为您提供帮助。 【参考方案1】:
var radio_span = $('<span></span>')
 .addClass('jqTransformRadioWrapper')
 .attr('id', spanRadio_id) (...etc)

这样做是将您的元素放入 radio_span 变量中,要查看该元素,您必须以某种方式使用 append、prepend、html 或任何其他执行此操作的方法将其插入到文档中,如下所示:

radio_span.appendTo('body');

http://jsfiddle.net/adeneo/zKWxp/4/

我现在看到你写的元素在打开检查元素或添加警报时变得可见,这听起来很奇怪,你可能不得不按照 Felix 说的去做,添加更多代码!

【讨论】:

感谢您的回答,但我当然会附加它,否则它在任何浏览器中都不起作用。正如我所说,它适用于所有浏览器,但在使用 chrome 等打开之后就不行了。无论如何我都会改变元素的顺序以及它是如何工作的......也许这是一种延迟......真的不知道。【参考方案2】:

不应该是这样吗:

var radio_span = $('#spanid');
 radio_span.addClass('jqTransformRadioWrapper');

【讨论】:

不,jQuery 允许方法链接。【参考方案3】:

尝试将您的代码包装在:

$(function()  ... );

如果这不起作用,请尝试将其包装成:

$(window).load(function ()  ...  );

【讨论】:

以上是关于为啥在使用 jquery 创建元素后它们在 Chrome 中不可见的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript - 使用 innerHTML 创建元素会复制它们。为啥? [关闭]

为啥 jQuery 不选择所有属性元素?

为啥以下创建 DOM 元素的方式不适用于 IE7 和 IE8 中的 jQuery?

为啥通过jQuery中的for循环后数组顺序是随机的? [复制]

jQuery动态创建的元素为啥不能绑定事件

如何使用 jQuery 创建元素并动态选择它们