Javascript 无法使用jQuery用HTML更改字符串?

Javascript 无法使用jQuery用HTML更改字符串?,javascript,jquery,html,Javascript,Jquery,Html,我一辈子都不知道我做错了什么?为什么这行不通?我试图用jQuery操作一个HTML字符串,我最终将在id=hist中插入历史数据,但现在我只是想让它操作HTML字符串,而不能 var hist = '<div class="panel panel-default"> \ <div class="panel-heading" style="background-color:#FFFF00">History</div> \

我一辈子都不知道我做错了什么?为什么这行不通?我试图用jQuery操作一个HTML字符串,我最终将在
id=hist
中插入历史数据,但现在我只是想让它操作HTML字符串,而不能

var hist = '<div class="panel panel-default"> \
            <div class="panel-heading" style="background-color:#FFFF00">History</div> \
            <div class="panel-body" id="hist"> \
            </div> \
        </div>';

$(hist).find("div").addClass("test");
console.log(hist);
var hist='1〕\
历史\
\
\
';
$(历史).find(“div”).addClass(“test”);
控制台日志(hist);

输出与hist变量完全相同。没有变化?我知道有一个简单的答案我就是想不出来。显然jQuery不返回变量,它应该直接影响
hist
输入,对吗?

变量不是字符串,它包含字符串。您的方法获取该字符串,将其转换为DOM片段,然后返回包装在jQuery对象中的DOM片段。因此,您必须将dom片段存储在变量中以代替原始字符串,或者将其存储在新变量中

var somevar = $(hist).find("div").addClass("test").end();

console.log($("<div>").append(somevar).html());
var somevar=$(hist).find(“div”).addClass(“test”).end();
console.log($(“”).append(somevar.html());

字符串不能被操纵,相反,当您对字符串执行任何操作时,结果是一个新字符串或值,而不是原始字符串或值。因此,如果不替换变量中存储的内容,就无法修改变量中字符串的值。整数、浮点、未定义和null也是如此。(我可能错过了一个或两个。)另一方面,可以操纵对象,因此任何基于对象(数组、函数等)的内容都可以在不创建新对象的情况下进行操纵。

您是否尝试过先解析字符串

var html=$(“”)
$(html).find(“div”).addClass(“test”);
警报(html.prop('outerHTML')

嗯,这是因为您正试图打印原始字符串。但是,字符串在JavaScript中是不可变的

请尝试这样做:

var elem = $(hist);
elem.find("div").addClass("test");
console.log(elem);

“显然jQuery不会返回一个变量,它应该直接影响‘hist’输入,对不对”显然这是不正确的,否则
hist
将不再包含字符串。认为任何方法都能够直接操作包含字符串的变量是疯狂的,字符串是基值,它唯一能保留其值并进行更新的时间是在更新对象的属性时。我的意思是返回变量,如var
new_hist=$(hist).find(“div”).addClass(“test”)console.log($(hist.find(“div”).addClass(“test”)成功了!非常感谢。这与我在您之前6分钟发布的内容相同,我只是使用了$.parseHtml。@Nickdewit是的,所有答案都是正确的,op可以选择他/她想要的,他/她发现最有用的。@Nickdewit我尝试了parseHtml,但它似乎不起作用?很抱歉,如果它们都是正确的,我仍在学习jQuery,可能会感到困惑。如果它们都是正确的,那么尝试使用它肯定是我的错。@Chad不用担心,伙计,我把它扔进了小提琴,以显示它现在可以工作了。不知道为什么,但当我尝试这种方法时,它操纵了整个dom?日志显示了整个容器?非常感谢您的帮助,我想您可能忘记了最后一行div周围的
。基本上,我又创建了一个dom片段来保存您的dom片段,这样我就可以轻松地将整个dom片段恢复为htmlstring形式。您也可以只
console.log(somevar)
将其作为包装在jQuery对象中的dom框架来获取。只是再试一次,奇怪的是它将测试类添加到了内部div不是全部吗?我想这就是end()所做的?不太确定。不,您的代码片段应该只将其添加到内部div。find()将只查找外部的内部div,不包括外部div。