Javascript 如何更新对象中字符串中的html元素?

Javascript 如何更新对象中字符串中的html元素?,javascript,jquery,Javascript,Jquery,我很难做一些看起来很简单的事情。 我有一个javascript对象: var main = { pages : { "123" : { "content": "<div><p>The div</p></div><nav><p>The nav</p></nav>", "foo":"bar" }, "4

我很难做一些看起来很简单的事情。 我有一个javascript对象:

var main = {
    pages : {
        "123" : {
            "content": "<div><p>The div</p></div><nav><p>The nav</p></nav>",
            "foo":"bar"
        },
        "456" : {
            "content": "<div><p>The div</p></div><nav><p>The nav</p></nav>",
            "foo":"bar"
        }
    }
};
var main={
页码:{
"123" : {
“内容”:“div

导航”, “foo”:“bar” }, "456" : { “内容”:“div

导航”, “foo”:“bar” } } };
我正在尝试以下代码:

$(function(){
        var p = main.pages;
        $.each(p,function(i,el){
            var c = p[i].content;
            var newc = $(c).find('nav').html('<p>New content</p>');
            //console.log(c);
            //console.log(newc);
        });
        //console.log(p)
});
$(函数(){
var p=主页;
$。每个(p,函数(i,el){
var c=p[i].内容;
var newc=$(c).find('nav').html('newcontent

'); //控制台日志(c); //console.log(newc); }); //console.log(p) });
要使我的对象看起来像:

var main = {
    pages : {
        "123" : {
            "content": "<div><p>The div</p></div><nav><p>New content</p></nav>",
            "foo":"bar"
        },
        "456" : {
            "content": "<div><p>The div</p></div><nav><p>New content</p></nav>",
            "foo":"bar"
        }
    }
};
var main={
页码:{
"123" : {
“内容”:“div

新内容”, “foo”:“bar” }, "456" : { “内容”:“div

新内容”, “foo”:“bar” } } };
但我很难做到这一点。我错过了什么

前一个例子我是在英国树立起来的

我确实理解,尝试将字符串作为dom元素进行操作通常不是一个好主意,但我没有其他选择,因为对象来自RESTful服务器,因此在当前页面中插入html对此没有多大意义。

实际上可以

$(函数(){
var p=主页;
//临时分居
var div=$('');
$。每个(p,函数(i,el){
//附加到div,查找并替换HTML
div.append(p[i].content.find('nav').html(“新内容”

”); //将其变回字符串并存储 p[i].content=div.html(); //为下一个操作清空div div.empty(); }); 控制台日志(p); });
因为
$(p[i].content)
不是一个元素而是两个元素,所以根据您的代码:

var tmp = $(p[i].content);
tmp.eq(1).html('<p>new content');
console.log(tmp.html());
var tmp=$(p[i].content);
html(“新内容”);
log(tmp.html());

如果我运行上面的代码,我会得到
Object 123:Object content:“div

nav

”foo:“bar”456:Object content:“div

nav

foo:“bar”
-那么它能满足你的问题你有一个js对象,你正试图生成它?你能澄清一下吗?再看一遍,字符串不一样。在预期的对象中,nav标记中的html是不同的,从“nav”更改为“新内容”。我可以知道您在代码上方实际想要什么。事实上,由于我在循环中获取内容,每次只有一个元素。我没有测试它,但我相信它也能工作,因为它类似于约瑟夫的答案。非常感谢@Robyflc:Put
$(main.pages['123'].content)
在控制台中,您会发现它返回一个包含2个元素的集合,其中
作为第二个元素的根元素。这将导致休耕
。find('nav')
正在搜索
的子节点,因此它与任何内容都不匹配。很抱歉。一开始我完全误解了你的意思。非常感谢!你救了我一天!!
var tmp = $(p[i].content);
tmp.eq(1).html('<p>new content');
console.log(tmp.html());