我道歉,如果已经有答案,我发现没有任何用处。
我正在开发一些JS代码,其中包含一些需要更改其html代码的块。 所以我有一个主要对象有两种属性:
我的第一个版本有效:我设置了一些javascript事件和方法,然后我的块内容被更改了。
当然(!)我需要修改代码来实现新功能,现在我的方法返回html代码,但我的变量上的.innerHTML不再起作用了。
让我给你看一些代码并解释一下
var AtelierScreen = function(ancre, dataJson){
if(!ancre.charAt) throw "Invalid string-dealer name type ('"+ancre+"') should be String";
if(ancre.length==0) throw "Invalid string-dealer name ('"+ancre+"') cannot be empty";
this.atelierContent;
this.operationMenu;
this.operationMenuContent;
this.operationRecap;
this.operationRecapContent;
this.create=function(obj,tagsuffix){
var tag = ancre+tagsuffix;
this.atelierContent.innerHTML += "<div id='"+tag+"'></div>";
var content = document.getElementById(tag);
if(!content) throw "Invalid html anchor using '"+tag+"' as an html id";
content.innerHTML=obj.getHtml();
return content;
}
try{
var dataObject = JSON.parse(dataJson);
this.atelierContent = document.getElementById(ancre);
if(!this.atelierContent) throw "Invalid html anchor using '"+ancre+"' as an html id";
// MENU
this.operationMenu = new OperationMenu(dataObject["dealer"],dataObject["operations"]);
this.operationMenuContent=this.create(this.operationMenu,"_menu");
this.operationMenuContent.innerHTML+="after init";
// RECAP
this.operationRecap = new OperationRecap();
this.operationRecapContent=this.create(this.operationRecap,"_recap");
this.operationMenuContent.innerHTML+="after recap init";
} catch(error){
throw "Error decoding json data :\n'"+error+"'\n\nJson =\n'"+dataJson+"'";
}
this.setSelectedModel=function(model){
this.operationMenuContent.innerHTML+="setSelectedModel";
var isTheSame = this.operationMenu.setSelectedModel(model);
if(!isTheSame) this.clearOperationItemFromRecap();
var temp = this.operationMenu.getHtml()
this.operationMenuContent.innerHTML=temp;
}
}
快速概述
以下是发生的事情
我仍然可以获取内容属性值 atelierScreen.operationMenuContent.innerHTML; 但是我不能在dom中插入文本。 atelierScreen.operationMenuContent.innerHTML =&#34;&#34 ;; 什么都不做。
我是否需要使用document.getElement查询dom ...每个时间? 我以前使用dom元素作为属性的版本正在运行......
我错过了什么,这太令人沮丧了;) 请帮忙。 感谢
答案 0 :(得分:0)
经过一些研究,可能是因为使用了innerHTML。 看起来使用innerHTML会破坏子元素。
我需要先解决这个问题,但我会尝试这样的事情:
prototype getContent()将如下所示:
if(content==null) content = document.getElementById(this.tag);
return content;
使用我的对象数组初始化我的主“屏幕”对象
我会给你一些反馈
答案 1 :(得分:0)
好的,这就是我做的事情
var AtelierScreen = function(ancre, dataJson){
try{
var dataObject = JSON.parse(dataJson);
this.atelierContent = document.getElementById(ancre);
if(!this.atelierContent) throw "Invalid html anchor using '"+ancre+"' as an html id";
var blocks = [
this.operationMenu = new OperationMenu(...),
this.operationRecap = new OperationRecap(...),
this.operationResult = new OperationResult(...)
];
for (var i = 0; i < blocks.length; i++) {
var block=blocks[i];
this.atelierContent.innerHTML += "<div id='"+block.tag+"'></id>";
}
for (var i = 0; i < blocks.length; i++) {
var block=blocks[i];
block.getContent().innerHTML = block.getHtml();
}
} catch(error){
throw "Error decoding json data :\n'"+error+"'\n\nJson =\n'"+dataJson+"'";
}
}