Javascript 使用jQuery每个函数更新外部变量
我正在测试一个简单的脚本,其中我将一个html字符串存储到一个变量中,并希望替换其中的一部分。我的实际代码是一个很大的html字符串,在本例中我不能使用replace(),因为我的each()中有wrap()和nextSibling()函数Javascript 使用jQuery每个函数更新外部变量,javascript,jquery,Javascript,Jquery,我正在测试一个简单的脚本,其中我将一个html字符串存储到一个变量中,并希望替换其中的一部分。我的实际代码是一个很大的html字符串,在本例中我不能使用replace(),因为我的each()中有wrap()和nextSibling()函数 var htmlvar=“test”; htmlvar=$(htmlvar).find('i').each(function(){ $(this.html('changed'); }); log('value:'+htmlvar[0].outerHTML)
var htmlvar=“test”;
htmlvar=$(htmlvar).find('i').each(function(){
$(this.html('changed');
});
log('value:'+htmlvar[0].outerHTML);
运行上述程序后,输出为:
<i>changed</i>
已更改
在我的each()函数对一些标记执行逻辑之后,我希望仍然有完整的html标记。有没有办法做到这一点
编辑:
这同样适用于文档对象
<body>
<p><i>test</i>
<script>
$(document).find('i').each(function() {
$(this).wrap('<h1></h1>');
});
console.log('value: '+$(document).find('html').html());
</script>
</body>
试验
$(文档)。查找('i')。每个(函数(){
$(此).wrap(“”);
});
log('value:'+$(document.find('html').html());
输出是当前文档的完整html。使用append()
而不是html()
。顾名思义,它将附加一个给定的字符串,而不是替换整个元素
$(this.append('changed')
如果将字符串转换为包装在JQuery对象中的实际DOM节点,则不需要。查找。您可以在节点中搜索i
元素(使用JQuery选择器的context参数)并更改其文本
var$htmlvar=$(“test”);
log($htmlvar[0].outerHTML);
$('i',$htmlvar).text('changed');
log($htmlvar[0].outerHTML)代码>
htmlvar
是一个字符串。您不能使用jquery dom操纵方法更改它。您要更改的
是否不止一个?我的实际html有很多其他标记。这只是一个示例。移动.find('i')。每个(函数(){
到一个作用于htmlvar
的新行可能会解决您的问题。但是…我希望它也会删除所有html/body/head标记。如果您想保留它们,您可能需要重新考虑您的方法。感谢Kevin的回复。尝试过了,但仍然丢失了其他标记。通过此更改,结果将是testchanged
或类似。发帖后3秒投反对票?!获得正确答案!感谢Scott的回复。我的实际代码不是文本替换。它是这样的:$(this.nextSibling).html($(this.nextSibling.wrap(“”);--我对这个问题的观点是,如果每个()函数通过保留其他部分来操作变量的find标记。我的意思是…find existing或not existing与问题无关。修复它的是您所做的其他更改,但没有提及。$(“i”,“htmlvar”)
仍然是一个.find()
。
<body>
<p><i>test</i>
<script>
$(document).find('i').each(function() {
$(this).wrap('<h1></h1>');
});
console.log('value: '+$(document).find('html').html());
</script>
</body>