刚开始使用jQuery,这个问题对我来说似乎是不可能的。 搜索所有论坛,没有运气。也许你们可以帮助我?
我的HTML看起来有点像这样:
<form>
<table class="tableClassName">
[content]
</table>
<div class="divClassName">
[content]
</div>
Here is some text
<div class="divClassName">
[content]
</div>
</form>
表单中有一些子元素。我只想把文本“在这里我发短信”,而不是其他东西。 有什么方法可以留下所有的子元素,只改变这个特定的文本吗?
到目前为止,这是我的菜鸟代码:
$(document).ready(function() {
var oldText = "Here is some text";
var newText = "the new text";
var entireElement = $("form:contains(" + oldText + "):not(table, div)").html();
$("form:contains(" + oldText + "):not(table, div)").html(entireElement+newText);
});
正如你所看到的,这不会取代任何东西。它只会将我的新文本放在</form>
之前。
怎么办?
答案 0 :(得分:0)
让事情变得更简单。 使用ID!;)
新的HTML代码
<form>
<table class="tableClassName">[content]</table>
<div class="divClassName">[content]</div>
<span id="form_text">Here is some text</span>
</form>
新的Javascript代码
$(document).ready(function() {
var newText = "the new text";
$('#form_text').html(newText);
});
答案 1 :(得分:0)
试一试:
$(document).ready(function() {
var oldText = "Here is some text";
var newText = "the new text";
var newHtml = $("form:contains(" + oldText + "):not(table, div)").html().replace(oldText,newText);
$("form:contains(" + oldText + "):not(table, div)").html(newHtml);
});
P.S。这绝对不是实现它的最佳方式。
答案 2 :(得分:0)
如果你不知道你的文本节点在容器中的位置,你可能会做这样的事情,即循环遍历所有这些节点,直到你得到一个匹配:
$("form").contents().each(function() {
if(this.nodeType == 3) {
if($.trim(this.nodeValue) == 'Here is some text') {
this.nodeValue = 'New text';
}
}
});