Low Pro Prototype DOM Builder 可以在 IE 中工作吗?

Does Low Pro Prototype DOM Builder work in IE?

提问人:Abie 提问时间:1/13/2009 最后编辑:Rob WAbie 更新时间:12/29/2011 访问量:1132

问:

Dan Webb 对 Prototype 的 Low Pro UJS 扩展提供了以下优雅的 DOM Builder:

var listItem = $li({ id : 'item-1' }, 
                 $strong("Some text")
               ); 
// returns a node equivalent to: <li id="item-1"><strong>Some text</strong></li>

$('a_list').appendChild(listItem);

虽然这在Firefox和Safari中对我们来说就像一个梦想,但在IE 6和IE7中,它因错误“对象不支持此属性或方法”而爆炸

对 Dan Webb 的 DOM Builder 可能正在做什么来包装与 IE 不兼容的 Element.new 有什么见解吗?

javascript internet-explorer prototypejs unobtrusive-javascript

评论


答:

0赞 Diodeus - James MacFarlane 1/13/2009 #1

从 v1.6 开始,Prototype 有一个内置的元素构造函数。语法与 Low Pro 略有不同。

$('a_list').insert(new Element("li", {id: 'item-1'})).update('some text').wrap('strong')

评论

0赞 Abie 1/13/2009
没错,谢谢。不幸的是,它比 Low Pro 的语法要麻烦得多。似乎您可以链接构造函数,但不清楚如何在同一级别创建多个嵌套元素。
0赞 Abie 1/15/2009
好的,解决了嵌套兄弟姐妹的语法,但与 Low Pro 相比,男孩是不是很丑。
1赞 Jack Sleight 2/7/2009 #2

我想“对象不支持此属性或方法”错误来自对 Prototype 的扩展元素方法之一的调用(在 IE 中不会自动应用)。但是,您正在处理的所有元素都来自 LowPro 或 $() 函数,这应该会为您扩展元素。

您可以尝试一下,看看它是否解决了问题:

var listItem = Element.extend($li({id: 'item-1'}, 
    Element.extend($strong("Some text"))
));

$('a_list').appendChild(listItem);

如果这解决了它,那么 LowPro 就不会扩展元素,这很奇怪。如果没有,那么一定有其他问题,你能在某处发布演示页面吗?