Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery每个函数更新外部变量_Javascript_Jquery - Fatal编程技术网

Javascript 使用jQuery每个函数更新外部变量

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)

我正在测试一个简单的脚本,其中我将一个html字符串存储到一个变量中,并希望替换其中的一部分。我的实际代码是一个很大的html字符串,在本例中我不能使用replace(),因为我的each()中有wrap()和nextSibling()函数


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>