我注意到 jQuery(或者是 Firefox)会改变我的一些 <span class="presentational"></span> into <span class="presentational" />
现在我的问题是,这样写我的标记可以吗?任何浏览器都会窒息吗?
就个人而言,我认为这样做看起来更干净<span class="presentational" />如果它将是空的。
最佳答案
我假设您的问题与在 Firefox 中查看源代码时自关闭元素上的红色斜杠有关。如果是这样,您就陷入了浏览器制造商与 Web 开发人员之间最激烈但同时也是被动的激进辩论之一。 XHTML 不仅仅是关于文档的标记。它还涉及如何通过网络提供文档。
在我开始之前;我正在努力不在这里偏袒任何一方。
XHTML 1.1 规范规定,Web 服务器应提供内容类型为 application/xhtml+xml 的 XHTML。 Firefox 将那些尾部斜杠挑出无效,因为您的文档是作为 text/html 而不是 application/xhtml+xml 提供的。拿这两个例子来说;相同的标记,一个作为 application/xhtml+xml,另一个作为 text/html。
http://alanstorm.com/testbed/xhtml-as-html.php
http://alanstorm.com/testbed/xhtml-as-xhtml.php
Firefox 将元标记中的尾部斜杠标记为对 text/html 提供的文档无效,而对 application/xhtml+xml 提供的文档有效。
为什么这是有争议的
对于浏览器开发人员来说,XHTML 的重点是您可以将您的文档视为 XML,这意味着如果有人向您发送无效的内容,规范说您不必解析它。所以,如果一个文档作为 application/xhtml+xml 并且有格式不正确的内容,开发人员可以说“不是我的问题”。你可以在这里看到它的实际效果
http://alanstorm.com/testbed/xhtml-not-valid.php
当文档以 text/html 形式提供时,Firefox 会将其视为普通的旧 HTML 文档并使用宽容、为您修复它、解析例程
http://alanstorm.com/testbed/xhtml-not-valid-as-html.php
因此,对于浏览器制造商来说,作为 text/html 的 XHTML 是荒谬的,因为浏览器的渲染引擎从未将它视为 XML。
几年前,希望不仅仅是标记猴子的 Web 开发人员(免责声明:我也将自己包括在内)开始寻找开发最佳实践的方法,这些方法不涉及三次嵌套表,但仍然允许提供引人注目的设计体验.他们/我们选择了 XHTML/CSS,因为 W3C 说这是 future ,唯一的选择是单一供应商(微软)控制事实上的标记规范的世界。真正的邪恶是单一供应商,而不是微软。我发誓。
那么争议点在哪里呢? application/xhtml+xml 有两个问题。第一个是 Internet Explorer。 IE 中有一个遗留错误/功能,其中作为 application/xhtml+xml 的内容将提示用户下载文档。如果您尝试使用 IE 访问上面列出的 xhtml-as-xhtml.php,那很可能会发生这种情况。这意味着如果你想使用 application/xhtml+xml,你必须浏览器嗅探 IE,检查 Accepts 头并且只向那些接受它的浏览器提供 application/xhtml+xml。这是 not as trivial听起来是对的,但也违背了 Web 开发人员所追求的“一次编写”原则。
第二个问题是 XML 的严酷性。这又是一个容易引发问题的问题,但有些人认为单个错误标签或未正确编码的单个字符不应导致用户看不到他们想要的文档。换句话说,是的,规范说如果 XML 格式不正确,你应该停止处理它,但用户并不关心规范,他们关心他们的猫的网站被破坏了。
XHTML 1.0(不是 1.1)规范说,XHTML 文档可以作为 text/html 提供,假设某些 compatibility guidelines遵循。诸如 img 标签会自动关闭之类的东西。这里的关键词是可能。在 RFC speak , 可能意味着可选。 Firefox 选择不将使用 XHTML doctype 提供的文档,而是将 text/html 内容类型视为 XHTML。但是,W3C 验证器很乐意将这些文档报告为有效。
我会让读者去思考同时写出一份文件来定义可能这个词的含义的文化的奇迹/恐怖。
向前进
最后,这是什么全HTML 5事情是关于。 XHTML 变得如此政治烫手山芋,以至于一群想要插入语言发展的人决定转向另一个方向。他们为 HTML 5 制定了规范。目前正在 W3C 中讨论,预计将在 future 十年的某个时候完成。与此同时,浏览器供应商正在从正在进行的规范中挑选功能并实现它们。
来自评论的更新
在评论中,Alex指出如果您要嗅探某些东西,您应该检查 Accept header 以查看 application/xhtml+xml 是否被用户代理接受。
这是完全正确的。一般来说,如果你要嗅探,嗅探是为了功能,而不是浏览器。
关于xml - 为元素编写自关闭标签不是传统上空的坏习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/348736/
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
下面的代码在我第一次运行它时就可以正常工作:require'rubygems'require'spreadsheet'book=Spreadsheet.open'/Users/me/myruby/Mywks.xls'sheet=book.worksheet0row=sheet.row(1)putsrow[1]book.write'/Users/me/myruby/Mywks.xls'当我再次运行它时,我会收到更多消息,例如:/Library/Ruby/Gems/1.8/gems/spreadsheet-0.6.5.9/lib/spreadsheet/excel/reader.rb:11
查看我的Ruby代码:h=Hash.new([])h[0]=:word1h[1]=h[1]输出是:Hash={0=>:word1,1=>[:word2,:word3],2=>[:word2,:word3]}我希望有Hash={0=>:word1,1=>[:word2],2=>[:word3]}为什么要附加第二个哈希元素(数组)?如何将新数组元素附加到第三个哈希元素? 最佳答案 如果您提供单个值作为Hash.new的参数(例如Hash.new([]),完全相同的对象将用作每个缺失键的默认值。这就是您所拥有的,那是你不想要的。您可以改用
HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
我是HanamiWorld的新人。我已经写了这段代码:moduleWeb::Views::HomeclassIndexincludeWeb::ViewincludeHanami::Helpers::HtmlHelperdeftitlehtml.headerdoh1'Testsearchengine',id:'title'hrdiv(id:'test')dolink_to('Home',"/",class:'mnu_orizontal')link_to('About',"/",class:'mnu_orizontal')endendendendend我在模板上调用了title方法。htm
我使用rails3.1+rspec和factorygirl。我对必填字段(validates_presence_of)的验证工作正常。我如何让测试将该事实用作“成功”而不是“失败”规范是:describe"Addanindustrywithnoname"docontext"Unabletocreatearecordwhenthenameisblank"dosubjectdoind=Factory.create(:industry_name_blank)endit{shouldbe_invalid}endend但是我失败了:Failures:1)Addanindustrywithnona
在Ruby中,是否有一种简单的方法可以将n维数组中的每个元素乘以一个数字?这样:[1,2,3,4,5].multiplied_by2==[2,4,6,8,10]和[[1,2,3],[1,2,3]].multiplied_by2==[[2,4,6],[2,4,6]]?(很明显,我编写了multiplied_by函数以区别于*,它似乎连接了数组的多个副本,不幸的是这不是我需要的)。谢谢! 最佳答案 它的长格式等价物是:[1,2,3,4,5].collect{|n|n*2}其实并没有那么复杂。你总是可以使你的multiply_by方法:c