为什么IE生成的DOM和CSQuery DOM之间存在差异?

时间:2014-01-24 11:02:46

标签: internet-explorer dom csquery

我正在尝试使用CSQuery来引用网站的DOM。如果我在IE中打开一个站点并检查一个元素,它的HTML与使用CSQuery.CreateFromUrl方法加载的同一站点略有不同(属性的排序和值之间的间隔)。例如,IE生成的div样式为“style = margin-bottom:0.5em;”并且对于相同的div CSQuery的Render方法生成了不同的HTML“style = margin-bottom:0.5em;” [之后没有空格:]。

因此,当我为CSQuery创建一个选择器时,例如“div [style ='margin-left:0.5em;']”它不起作用,因为CSQuery的内部DOM在':'和'之间没有空格0.5' 。

我的问题是我的应用程序用户将使用IE来检查DOM元素,从而创建CSS选择器以使用CSQuery查询DOM。对于这种情况,我可以在我的代码中从选择器中删除空格但我不想这样做,因为其他选择器之间可能存在一些其他的细微差别。

那么有没有办法确保CSQuery生成与IE相同的DOM? 我已经尝试过使用CSQuery.Creat(HTML返回IE),但不知何故,CSQuery仍然以与IE DOM不同的方式格式化HTML。

谢谢, 贝

2 个答案:

答案 0 :(得分:0)

  1. 要确保您在CsQuery对象中获得与在IE浏览器中相同的响应,应该在浏览器中关闭javascript并且不接受来自网站的cookie。 (CQ.CreateFromURL返回javascript未使用的渲染DOM)。此外,有时会通过cookie连接不同的响应。
  2. 在您的情况下,您只需要设置'解析方法'。

    Check out official documentation

    查找“从HTML创建”部分。

    祝你好运。

答案 1 :(得分:0)

问题不在于IE或CsQuery,两者都按设计工作。问题是您期望来自两个不同解析引擎的相同输出。 IE根据我的知识使用mshtml,CsQuery模仿Firefox使用的Gecko。因此,要获得相同的输出,您需要切换到mshtml或让您的用户使用firefox。您选择的组合将有多种差异,因为解析理念略有不同,并且它显示在您看到的这些异常中。