jquery AppendTo&在Firefox中附加错误

时间:2009-11-07 12:54:35

标签: jquery firefox append

我使用jQuery 1.3.2和Firefox收到一个奇怪的错误。我为元素创建了一个小弹出窗口,我正在使用代码

  var popupWindow = $($('#template')[0].innerHTML).css(
            'top', top).css(
            'left', left).css(
            'position', 'absolute').css(
            'opacity', '1');

然后我使用Append()和AppendTo()函数基本上提供,我尝试确定高度和宽度,但每个下面得到JS异常错误

var right = left + $(popupWindow).width(); // empty width, js exception
var bottom = top + $(popupWindow ).height(); //empty height, js exception
对于Append()命令显示了popupWindow,但是由于它们在FF-DOM中不可见,因此无法获得宽度,高度和元素。

在IE中一切正常,但不在Firefox

有没有人有任何想法,因为我现在已经尝试了几个小时并且得到了一堵砖墙。

2 个答案:

答案 0 :(得分:0)

我不完全确定你为什么要使用

var popupWindow = $($('#template')[0].innerHTML)

基本上翻译为

“获取id为模板的元素(这将只是有效HTML的一个元素),然后获取第一个元素的innerHTML,然后换行jQuery对象中innerHTML中包含的元素。“

为什么不使用

var popupWindow = $('#template').css({
                      top : top,
                      left: left,
                      position: 'absolute',
                      opacity: 1 });

另外,可能要考虑使用类而不是内联css。如果您需要进一步的帮助,请发布html布局。

答案 1 :(得分:0)

var popupWindow = $($('#template')[0].innerHTML)

是的,你真的不想这样做。

这将获取模板div的HTML并将其发送到$()函数,这是一个多功能函数。根据#template的内容,它可能会创建一些HTML(可能是多个元素,丢弃任何直接文本内容),或者它可能将其视为选择器并从页面中选择匹配元素。

(这不是我最喜欢的jQuery功能之一。)

此外,在jQuery中使用innerHTML会产生副作用,因为jQuery会将自己的属性添加到元素中,以识别它们以添加数据和事件处理程序。如果你复制IE上的innerHTML< 8(它有一个错误,它认为属性和属性是一样的),你将无意中复制那些jQuery内部ID,制作同一元素的两个副本并混淆图书馆。您应该使用.html()来获取jQuery标记;这会使用一个破坏的RegExp来尝试在递交标记之前删除内部ID属性。

(这也不是我最喜欢的jQuery功能之一。)

如果您只想在模板元素上设置样式,请说:

var popupWindow= $('#template');
popupWindow.css({top: '1px', left: '2px', ...});

如果您想制作模板的副本并在其上设置样式:

var popupWindow= $('#template').clone();
popupWindow.css(...);

也没有必要说:

 $(popupWindow)

因为popupWindow已经是一个jQuery包装器。你只是让它制作内部元素列表的另一个副本。

js exception

有什么例外?就个人而言,我没有例外,但这在很大程度上取决于你放在#template内的内容。