繁体   English   中英

IE7 / 8 + <time> 标签+ jQuery .clone()=?

[英]IE7/8 + <time> tag + jQuery .clone() =?

首先,我会说我已经从根本上改变了我的方法已经解决了这个问题。 但是在解决问题的过程中,我整理了一个令我着迷并困扰我的测试用例。

我有一个从AJAX调用返回的字符串。 该字符串包含HTML,其中大多数是无用的。 我希望将字符串(及其所有子级)中的一个元素插入DOM。 一个模拟是:

<!DOCTYPE html>
<html>
<head>
    <title>wtf?</title>
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script>
        $(document).ready(function() {
            var markup = '<div class="junk"><div class="good"><time datetime="2013-03-29">March 29, 2013</time></div></div>',
                output = $(markup).find('.good').clone().wrap('<div />').parent().html();

            $('body').append(output);
        });
    </script>
</head>

<body></body>
</html>

我在这里有此文件的托管副本: http : //alala.smitelli.com/temp/wtf_ie.html (不会永远存在)。

应该做的是提取.good div和子<time>元素,然后将它们插入主体。 我执行.wrap().parent()来提取除其子元素之外我选择的元素(请参阅此问题 )。 .clone().html()是证明问题的方案。

对于用户,它应该显示今天的日期。 它适用于Chrome,Firefox,IE9等:

March 29, 2013

但是在IE7和8中,显示的文本为:

<:time datetime="2013-03-29">March 29, 2013

显示了<开头,并以某种方式插入了一个冒号。 结束符</time>看起来不受影响,并且未显示为转义。

这里发生了什么? 这是某种错误还是预期的行为? 结肠从哪里来?

编辑:至于添加document.createElement('time')或html5shiv的建议,似乎都没有改变行为。

令我非常惊讶的是,我发现,如果从方程式中删除jQuery时,实际上是解析标记,即使没有createElement('time')或使用Shim / shiv,问题也会消失(在IE7和IE8上):

<!DOCTYPE html>
<html>
<head>
    <title>wtf?</title>
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script>
        $(document).ready(function() {
          var div, markup, output;

          markup = '<div class="junk"><div class="good"><time datetime="2013-03-29">March 29, 2013</time></div></div>';

          div = document.createElement('div');
          div.innerHTML = markup;

          output = $(div).find('.good').clone().wrap('<div />').parent().html();

          $('body').append(output);
        });
    </script>
</head>

<body></body>
</html>

实时复制 | 资源

所做的更改是,我只使用浏览器自己对innerHTML的处理和一个断开的div来解析markup ,而不是让jQuery为我做。

因此,我不得不说这可能是jQuery在不支持HTML5元素的较旧浏览器上处理HTML片段的问题。 但这将是一项重大索赔,重大索赔需要大量证据...

但是,如果我更改这些行:

div = document.createElement('div');
div.innerHTML = markup;

output = $(div).find('.good').clone().wrap('<div />').parent().html();

至:

div = $(markup);
output = div.find('.good').clone().wrap('<div />').parent().html();

我遇到了问题(在IE7和IE8上): Live Copy | 资源

因此它确实开始看起来像是jQuery问题...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM