【问题标题】:Problem with HTML inside JavascriptJavascript中的HTML问题
【发布时间】:2010-03-18 18:43:02
【问题描述】:

我正在尝试使用 JQuery timeago 插件在我的网站中实现“time-ago”功能。不幸的是,我遇到了一些问题。

<script type="text/javascript" charset="utf-8">
jQuery("abbr.timeago").timeago();
</script>

var content = document.getElementById('div');

var html = "<abbr class=timeago title=2008-07-17T09:24:17Z></abbr>" + '<br>';
content.innerHTML += html

<div id='div'></div>

这个 jquery 插件基本上是从标题转换时间戳,并为每个 abbr class=timeago 以一种不错的格式打印出来。问题是上面的代码不起作用,但如果我把它放在这个 div 中它工作正常。我认为这可能是因为这个 jquery 插件是在通过 javascript 生成 html 之前应用的,但我不确定。有什么想法吗?

【问题讨论】:

    标签: javascript jquery html jquery-plugins


    【解决方案1】:

    我敢打赌,问题在于您初始化“timeago”插件的语句正在运行在您将&lt;abbr&gt; 元素放入页面之前。因此,当它运行时,什么也没有发生。

    既然已经有了 jQuery,为什么还要将原始代码添加到 DOM 中?

    $('#div').append($('<abbr/>')
      .addClass('timeago')
      .attr('title', '2008-07-17T09:24:17Z')
    ).append($('<br/>')).append($('<br/>'))
    .find('abbr.timeago').timeago();
    

    (我假设您确实有一个“id”值为“div”的&lt;div&gt; 元素。)

    声明:

    $('abbr.timeago').timeago();
    

    的意思是,“找到所有&lt;abbr&gt; 类为“timeago”的元素,并在每个元素上初始化“timeago”插件。”它不是的意思是,“任何时候页面上有一个&lt;abbr&gt; 元素,并且它具有类“timeago”,那么请确保为它设置了“timeago”插件。 "

    【讨论】:

    • 嗯,我这样做的原因是我在一个循环中使用它,我有多个不同日期的 tomeago div。你的代码肯定会更简单、更优雅,但这不是我需要的。
    • 如果您在页面末尾(或在 $(document).ready() 函数内)运行代码,它针对页面上的每个匹配元素执行页面(在这种情况下,任何带有“timeago”类的&lt;abbr&gt;。实际上,您只需要确保标题“”属性中有一个ISO8601时间戳。timeago.yarp.com
    • 是的,但请注意,在原始问题中,元素是由 Javascript 动态添加到页面中的。
    • @Vafello 好吧,我仍然怀疑您的根本问题是您需要在将内容添加到页面之后调用“timeago”初始化,而不是之前。跨度>
    • 那么添加“timeago”部分的代码在哪里?为什么不直接在最后设置 jQuery 插件呢?
    【解决方案2】:
    var html = "<abbr class=timeago title=2008-07-17T09:24:17Z></abbr>" + '<br><br>';
    

    首先,将你的属性放在引号中:

    var html = "<abbr class=\"timeago\" title=\"2008-07-17T09:24:17Z\"></abbr>" + '<br><br>';
    

    另外,请参阅此页面:http://www.w3schools.com/TAGS/tag_abbr.asp

    ABBR 标记的目的是为爬虫等提供有关内联元素的附加信息。我很难想出你可能想在日期时间使用它的原因。

    我想说,与其爬过一个你不太了解的插件试图找出它为什么喜欢 div 而不是 abbr's,不如使用 div。如果它必须是内联元素,请使用&lt;span&gt;

    【讨论】:

    • 在 HTML 中并不总是需要引号(在这种情况下也不需要)。这应该不是问题,尽管始终使用它们是一种很好的做法。 w3.org/TR/html4/intro/sgmltut.html#h-3.2.2
    • 谢谢,我没有仅仅出于测试目的使用引号,因为我认为这可能会导致问题。反正我改成div了,没问题但是还是解决不了问题:/
    【解决方案3】:

    我自己想通了。最好使用 jQuery.timeago(timestamp) 函数而不是处理 abbr 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-04
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      相关资源
      最近更新 更多