代码之家  ›  专栏  ›  技术社区  ›  peirix

在jQuery中对html()和text()执行直接操作

  •  0
  • peirix  · 技术社区  · 15 年前

    有没有一种方法可以告诉jQuery您想要的是以后的结果 text() html() 适用于它吗?难以解释,更容易展示:

    $("#someElement").html().replace(oldWord, newWord, "g");
    

    $("#someElement").html($("#someElement").html().replace(oldWord, newWord, "g"));
    

    这是a**中的痛。

    编辑: 但我想看到的是,这样做的可能性:

    $("#someElement").html(.replace(oldWord, newWord("g"));
    

    我不知道这是否可行,甚至不知道是否切实可行。有什么原因不能这样做吗?

    3 回复  |  直到 15 年前
        1
  •  3
  •   tvanfosson    15 年前

    不,这些函数返回字符串,而不是jQuery。您首先需要获取值,执行您的魔术,然后将值设置回原来的值。您还必须使用普通javascript来实现这一点,但是语法可能没有那么麻烦。

     var elem = $("#someElement").get(0);
     elem.innerHTML = elem.innerHTML.replace(oldWord,newWord,"g");
    

    就我个人而言,我会坚持使用jQuery,但将其分开以使其更具可读性。

     var elem = $("#someElement");
     var html = elem.html();
     elem.html( html.replace(oldWord,newWord,"g") );
    
        2
  •  3
  •   nickf    15 年前

    您可以非常轻松地将其制作成一个简单的插件:

    jQuery.fn.replaceHTML = function (old, new) {
        return this.each(function() {
            var $t = $(this);
            $t.html($t.html().replace(old, new);
        });
    };
    
    // usage:
    $('#myElement').replaceHTML('foo', 'bar');
    $('#anotherElement').replaceHTML(/f(?:oo|u)/g, 'bar');
    

    这也不会打断您的链接:

    $('#blah').replaceHTML('abc', 'def').hide();
    

        3
  •  0
  •   Guffa    15 年前

    不,您将HTML代码作为字符串获取,更改后必须将字符串放回原处。

    对于这样的工程来说 html 函数必须返回具有如下方法的对象 replace 您可以使用它来更改内容。但是,如果您想要应用多个更改(这几乎就是链接方法的要点),那么这将是无效的,因为它必须获取HTML代码并为每个更改将其放回。当您将HTML代码作为字符串获取时,您可以对其执行任何您喜欢的操作,并在完成后将其放回原处。