jqueryappendto

jqueryappendto,jquery,appendto,Jquery,Appendto,我不确定这个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=?

我不确定这个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


有人能理解这一点吗?

HTML是完全有效的。对于XHTML,您必须使用一个自动关闭元素

但这并不重要,因为当jQuery修改内容时,它正在与DOM进行交互—标记部分已经基本结束,只是jQuery在可以隐藏的情况下使用innerHTML。因此,除了Firebug等工具将DOM结构显示为HTML字符串外,您不会将结果视为标记。如果您使用的是XHTML文档,那么可能您使用的任何工具都没有遵循XHTML约定进行显示,但这只是一个显示问题,而不是页面的实际问题

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

导致问题的不是jQuerys.appendTo。在下面的代码段中:

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);

也将创建一个没有关闭的节点。无论如何,这在所有浏览器中都是绝对正确和有效的。如果某个XHTML验证确实对此表示不满,您可以优雅地忽略它。

您是说格式不正确的XHTML吗?它适合我。请参见,在为浏览器创建标记以解析为DOM树时,需要考虑标记的有效性。查看生成的源代码,或者类似萤火虫的HTML标签,看到你认为无效的东西根本不是一个问题。它只是程序对内存中存在的内容的表示。结束标记是一个标记概念。这是我们正在与之交互的DOM,而不是标记。显示标记的任何东西都是一个读取DOM并将其呈现为标记的工具,这完全是另一回事。@T.J:同意。无论如何,大多数标记必须有一个结束标记或/>按规范。当浏览器对文档进行解析时,如果您的文档标记为HTML或XML,这也会有所不同。例如,没有结束标记的标记在XML中是完全正确的,但在HTML解析中会破坏代码;标记不再适用,除非在获取/设置innerHTML时,我们正在操作DOM。如果您看到的是标记,那么当您查看DOM结构时,您就看到了工具生成的内容,就像调试器将使用类似于字符串文本的符号向您显示字符串的内容一样。不过说到标记,OP并没有说他在使用XHTML,而且对于像img这样的无效元素,/>在HTML中是无效的:对不起,我的评论是,对于像img这样的无效元素,/>在HTML中是无效的,这是错误的:它是允许的,如果存在的话就被忽略了。