【问题标题】:Modifying innerHTML from 3rd Party Script从 3rd 方脚本修改 innerHTML
【发布时间】:2013-01-26 04:40:02
【问题描述】:

我有一个正在导入菜单的第 3 方脚本,但我无法编辑此第 3 方脚本。它生成如下代码:

<div id="wmenu-updated" style="display: block;">
  <small>Menu updated</small>
  <span innerhtml="19 hours ago"></span>
</div>

它应该采用19 hours ago 并将其显示为跨度内的文本,但无论出于何种原因,它都不起作用,并且脚本的制作者在修复错误方面几乎没有帮助。

有没有一种方法,使用 jQuery,一旦页面加载,我可以获取 innerhtml 并将其作为文本在该范围内吐出?

【问题讨论】:

    标签: javascript jquery innerhtml


    【解决方案1】:
    $( document ).ready( function () {
        $( '#wmenu-updated span' ).text( function () {
            return $( this ).attr( 'innerhtml' );
        });
    });
    

    你可以使用jQuery的text函数来更新span中的文本

    【讨论】:

    • 做到了!谢谢!我确实必须将 $( document ).ready 更改为 $(window).load,因为在其他脚本运行之前未加载第 3 方脚本。
    • @bobthecow 使用 span[innerhtml] 的答案看起来更好
    • @Christophe 你为什么这么说?他的 selectors 和 find 的组合会执行得更慢。更不用说提供了 #wmenu-updated 的 id,所以我假设这将是唯一的情况。
    • 选择器的一个有趣的“行为”是它们从右到左进行评估,因此 id 可能没有多大帮助。 $('#wmenu-updated').find('span') 应该会更好。我也同意 [innerhtml] 在 OP 的示例中没有增加太多价值,但我假设它已经为论坛简化(正如 OP 所说,“这样的代码”)。
    • 你说的是 CSS 行为,而不是 Sizzles 行为。
    【解决方案2】:

    使用$.attr()$.text() 来实现这一点

    $(document).ready(function(){
       var txt = $("#wmenu-updated span").attr("innerhtml");
       $("#wmenu-updated span").text(txt);
    });
    

    【讨论】:

      【解决方案3】:

      试试这个:

      $(document).ready( function ( e ) {
          var q = $('span').attr('innerhtml');
          $('#wmenu-updated').children('span').text( q );
      });
      

      【讨论】:

        【解决方案4】:

        你可以试试这个:fiddle

         $(function(){
            $(document).children('#wmenu-updated').find('span[innerhtml]')
            .text($(this).attr("innerhtml"));
         });
        

        或者像这样更简单:

        $('span[innerhtml]').text($('span[innerhtml]').attr('innerhtml'));
        

        【讨论】:

        • 旁注:这不是&lt;kbd&gt; 的用途,尽管它可能看起来很漂亮。
        【解决方案5】:

        很多人都在接近:)

        这将为您完成:

        $('selector').find('span[innerhtml]').each(function() {
            $(this).html($(this).attr('innerhtml'));
        });
        

        jsFiddle here.

        这在功能上是等效的:

        $('selector').find('span[innerhtml]').html(function() {
            return $(this).attr('innerhtml');
        });
        

        【讨论】:

          【解决方案6】:
          $("#wmenu span").attr("innerhtml", "Your Update here");
          

          【讨论】:

          • 这只是更新属性,不会作为span的文本喷出来。
          • 然后这样做:$("#wmenu span").text("Your Update here");
          • 请更新您的答案以反映这一点。但是,OP 的问题是关于使用属性值更新测试。并且不使用新值进行更新。
          • 如果你有几个跨度,你也可能更具体,比如 $("#wmenu span:first").text("Your Update here");
          猜你喜欢
          • 1970-01-01
          • 2023-03-23
          • 1970-01-01
          • 1970-01-01
          • 2012-01-15
          • 2021-09-29
          • 1970-01-01
          • 2016-06-25
          • 1970-01-01
          相关资源
          最近更新 更多