2009-12-17 72 views
2

我:jquery从<img>标记中删除'/'?

<img class="avatar_img" /> 

后:

avatar_img.attr({src: "/site_media/avatars/" + this.userid + ".jpg", title: this.username}); 

我得到:

<img title="admin" src="/site_media/avatars/1.jpg" class="avatar_img"> 

正如你所看到的,斜线 “/” 从标签的结尾,disappeard。我该如何解决它?这似乎使一些问题,使我的网站......

文档类型和其他...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
+0

您正在使用哪种doctype? – 2009-12-17 16:48:38

+0

你确定吗?什么浏览器?什么文档类型? – 2009-12-17 16:49:21

+0

你可以将你的'DOCTYPE'声明添加到你的问题中作为参考吗? – 2009-12-17 16:49:54

回答

4

当查看生成的源代码,这并不一定遵循XHTML标准。浏览器在运行时读取DOM的方式与您在XHTML代码中看到的方式不同。这实际上如何影响网站的呈现?它不应该有所作为。

+0

是的你是对的,这不是渲染不好的原因,但是在歌剧看起来不错...无论如何thx通知+1和接受。 – IProblemFactory 2009-12-17 17:11:50

4

有趣,我只是昨天已经解决了这个问题!

问题是,即使您指定了XHTML文档类型,如果Content-Type标头设置正确(如application/xhtml+xml),DOM(至少在FireFox中)将仅遵循XHTML规则。这包括使用JavaScript处理DOM,包括jQuery。作为一个实验,考虑下面的代码:

var foo = $('<div></div>'); 
foo.html('<img src="#" />'); 
console.debug(foo.html()); 

此代码将有取决于什么内容类型设置不同的结果。如果Content-Type为text/html,那么您将返回<img src="#">,因为使用plain-ole HTML时,这是正确的。但是,如果Content-Type为application/xhtml+xml或任何其他可接受的XHTML MIME内容类型,则应返回<img src="#" />

因此,无论您使用哪种服务器端框架,您都需要将该标题添加到响应中。如果它是一个静态文件,你应该能够有一个meta标签做到这一点:

<meta http-equiv="Content-Type" content="application/xhtml+xml" /> 

您可以检查标题为使用FireBug Net标签页面加载。

我有ASP.NET MVC的额外问题,它不会设置内容类型,即使我特别设置它。诀窍是你需要在之后将其设置为来查看。所以,这应该工作:

public void ActionResult Index() 
{ 
    var result = this.View(); 
    this.Response.ContentType = "application/xhtml+xml"; 
    return result; 
} 

编辑:我只看见自己的编辑和你与你的meta标签设置错误Content-Type。有关更多详情,请参阅我的答案的其余部分。

+0

无论如何,内容类型只能帮助thx。 – IProblemFactory 2009-12-17 17:12:30

1

它取决于浏览器生成的内容。 Internet Explorer将主要生成它喜欢的任何内容,通常以大写形式显示未封闭的图像标记。即使它可以正确呈现,如果直接检查DOM,通常也会如此。

Firefox更有可能按照它所说的去做。但是,在这两种浏览器中,如果您的页面中某处存在无效的XHTML,则可能会将渲染引擎引入怪癖模式 - 在这种情况下,它将尽最大努力以旧式浏览器的方式渲染页面,几乎处理你给它的任何标记,并且至少给用户呈现一些东西。副作用是,您在符合标准的优雅方面的努力可能会被忽略,呈现也不会像您期望的那样出现。

所以我会先看看页面的其余部分,并确保它完全符合XHTML,然后JQuery和DOM应该很好地一起玩。