1.在iframe子页面中获取父页面的元素:
a>window.parent.document这个是获取父页面document中的对象;
b>如果要获取父页面js中的方法:window.parent.xxxx();xxxx()为方法;
2.在父页面中获取iframe子页面中的元素:
a>
var child =
document.getElementByIdx_x("mainFrame").contentWindow//mainFrame这个id是父页面iframe的id
child.document//获取子页面中的document对象;
/*** 说明:通过 “父子树” 访问场景内的对象
* 操作:无,查看log信息
* 教程:ThingJS 教程——>园区与层级——>场景层级
* 难度:★★☆☆☆
*/
var app = new THING.App({
url: 'https://www.thingjs.com/static/models/storehouse'
})
// 加载场景后执行
app.on('load', function (ev) {
// 获取园区对象
var campus = ev.campus
// 通过场景的 父子树 访问对象
var children = campus.children
for (var i = 0i <children.lengthi++) {
var child = children[i]
var id = child.id
var name = child.name
var type = child.type
console.log('id: ' + id + ' name: ' + name + ' type: ' + type)
}
// id 107 为白色厂区建筑,
// parent: app.query('107')[0] 为在厂区内创建物体
// 厂区内创建的物体,只有在进入厂区后才会能显示,点击厂区进入,则看到绿色小车
// 当推出厂区后,绿色小车则隐藏
var obj = app.create({
type: 'Thing',
id: 'No1234567',
name: 'truck',
parent: app.query('107')[0],
url: 'https://model.3dmomoda.com/models/8CF6171F7EE046968B16E10181E8D941/0/gltf/', // 模型地址
position: [0, 0, 0], // 世界坐标系下的位置
complete: function (ev) {
//物体创建成功以后执行函数
console.log('thing created: ' + ev.object.id)
}
})
var campus = ev.campus
console.log('after load ' + campus.id)
// 切换层级到园区
app.level.change(campus)
})
JavaScript 本身是不支持这种查找的, 因为"子对象"只是父对象中的一个引用, 它也可以被其它对象引用, 这样一个"子对象"就可能有多个"父对象". 能实现的是在代码运行中获取它的上级对象.
var Obj = function(){
this.child = {
parent: {},
get_parent: function()
{
return this.parent
}
}
this.init = function()
{
this.child.parent = this
}
this.init()
}
var o = new Obj
console.log(o.child.get_parent())