在jQuery中对html()和text()执行直接操作
有没有一种方法可以告诉jQuery您希望将在jQuery中对html()和text()执行直接操作,jquery,Jquery,有没有一种方法可以告诉jQuery您希望将text()或html()之后的内容应用于它?难以解释,更容易展示: $("#someElement").html().replace(oldWord, newWord, "g"); 上述操作不会更改DOM,您必须执行以下操作: $("#someElement").html($("#someElement").html().replace(oldWord, newWord, "g")); 这是a**中的痛 编辑:不过,我希望看到的是这样做的可能性:
text()
或html()
之后的内容应用于它?难以解释,更容易展示:
$("#someElement").html().replace(oldWord, newWord, "g");
上述操作不会更改DOM,您必须执行以下操作:
$("#someElement").html($("#someElement").html().replace(oldWord, newWord, "g"));
这是a**中的痛
编辑:不过,我希望看到的是这样做的可能性:
$("#someElement").html(.replace(oldWord, newWord("g"));
我不知道这是否可行,甚至不知道是否切实可行。有什么原因不能这样做吗?没有,您将HTML代码作为字符串,更改后必须将字符串放回原处
对于这样的构造,
html
函数必须返回一个对象,该对象具有replace
等方法,您可以使用这些方法来更改内容。但是,如果您想要应用多个更改(这几乎就是链接方法的要点),那么这将是无效的,因为它必须获取HTML代码并为每个更改将其放回。当您将HTML代码作为字符串获取时,您可以随意使用它,并在使用完后将其放回原处。不,您将HTML代码作为字符串获取,更改后必须将字符串放回原处
对于这样的构造,
html
函数必须返回一个对象,该对象具有replace
等方法,您可以使用这些方法来更改内容。但是,如果您想要应用多个更改(这几乎就是链接方法的要点),那么这将是无效的,因为它必须获取HTML代码并为每个更改将其放回。当您将HTML代码作为字符串获取时,您可以随意使用它,并在使用完后将其放回原处。否这些函数返回字符串,而不是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") );
不,这些函数返回字符串,而不是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") );
您可以非常轻松地将其制作成一个简单的插件:
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();
正如Doug D所评论的,只要记住正则表达式+html可能是不可预测的,并且可能会导致问题,除非你非常小心。你可以很容易地将其制作成一个简单的插件:
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();
正如Doug D评论的那样,请记住,正则表达式+html可能是不可预测的,并且可能会导致问题,除非您非常小心。请注意,以防您尚未想到它。HTML上的搜索和替换有两个复杂问题。1.替换将应用于HTML标记名和属性,这可能是有意的,也可能不是有意的。2.某些“单词”可能无法按预期替换,因为它们被标记分割,例如,[span class=“firstChar”]D[/span]直接操作。替换“Direct”将找不到它,因为injects关闭SPAN标记。请注意,以防您尚未想到它。HTML上的搜索和替换有两个复杂问题。1.替换将应用于HTML标记名和属性,这可能是有意的,也可能不是有意的。2.某些“单词”可能无法按预期替换,因为它们被标记分割,例如,[span class=“firstChar”]D[/span]直接操作。替换“Direct”将找不到它,因为injects closing SPAN标记。