-1

我不确定为什么这个 jQuery 输出格式错误的 HTML:

<img src="http://farm6.static.flickr.com/5300/5459333519_0bfb0763b0_m.jpg">

从这段代码:

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?id=59597329@N08&lang=en-us&format=json&jsoncallback=?", function(data){
    $.each(data.items, function(i,item){
        $("<img>").attr("src", item.media.m).appendTo("#mac");
    });
});

#mac是保存图像的 div

任何人都可以理解这一点吗?

4

2 回答 2

5

该 HTML 是完全有效的。(对于 XHTML,您必须使用自闭合元素。)

但这并不重要,因为当 jQuery 修改事物时,它正在与 DOM 交互(事物的标记部分已经结束了,除了 jQueryinnerHTML可以在幕后使用时)。因此,您不会将结果视为标记,除非在工具(如 Firebug)中将 DOM 结构显示为 HTML 字符串。如果您使用的是 XHTML 文档,那么您使用的任何工具可能都没有遵循用于显示目的的 XHTML 约定,但这只是一个显示问题,而不是页面的实际问题。

可以这样想:标记就像源代码中的字符串文字;DOM 就像运行时的​​实际字符串。调试器将在运行时向您显示字符串的内容,通常使用与字符串文字类似的符号(尽管会有所不同);类似地,Firebug 和 Chrome 的开发工具等工具使用标记符号向您展示 DOM 结构。但这只是工具中的显示内容。

于 2011-02-20T12:47:11.903 回答
0

.appendTo导致“问题”的不是 jQuerys 。在这样的片段中:

var bar = document.createElement('img');
    bar.setAttribute('src', 'http://farm6.static.flickr.com/5300/5459333519_0bfb0763b0_m.jpg');
    document.body.insertBefore(bar, document.body.firstChild);

还将创建一个<img>没有关闭的节点</img>。无论如何,这在所有浏览器中都是绝对正确和有效的。如果某些 XHTML 验证确实抱怨这一点,您可以优雅地忽略它。

于 2011-02-20T12:47:50.277 回答