Javascript 通过一个对象和两条路径的组合访问对象

Javascript 通过一个对象和两条路径的组合访问对象,javascript,string,typescript,object,Javascript,String,Typescript,Object,我想将一个对象、变量中的一条路径和一条路径组合起来,类似于中的解释,但带有3“部分” 以下是最小可重复性示例: 我希望combine()函数打印selector[0]。children[foo]。textContent或selector[0]。children[foo]。children[0]。textContent取决于bar值 const selector=document.getElementsByClassName('main')) 常数foo=0 设bar='' 常量切换=()=>{

我想将一个对象、变量中的一条路径和一条路径组合起来,类似于中的解释,但带有3“部分”

以下是最小可重复性示例: 我希望
combine()
函数打印
selector[0]。children[foo]。textContent
selector[0]。children[foo]。children[0]。textContent
取决于
bar

const selector=document.getElementsByClassName('main'))
常数foo=0
设bar=''
常量切换=()=>{
如果(条=='')条=''。子项[0]'
else条=“”
}
常数测试=()=>{
console.log(组合('selector[0].children[foo]',bar'.textContent'))
//我需要一个类似combine()的函数,该函数将根据条形图的值打印“选择器[0]。子对象[foo]。文本内容”或“选择器[0]。子对象[foo]。子对象[0]。文本内容”。
}

地狱世界
切换
测试

像这样的东西?但在使用之前,请阅读此处的
eval()

const selector=document.getElementsByClassName('main'))
常数foo=0
设bar=''
常量切换=()=>{
如果(条=='')条=''。子项[0]'
else条=“”
}
函数combine(){
let result=“选择器[0]。子项[foo]”+bar+“.textContent”
返回结果
}
常数测试=()=>{
console.log(eval(combine()))
//我需要一个类似combine()的函数,该函数将根据条形图的值打印“选择器[0]。子对象[foo]。文本内容”或“选择器[0]。子对象[foo]。子对象[0]。文本内容”。
}

地狱世界
切换
测试

您需要使用的是
查询选择器
来查找您要查找的元素

阅读,这样你就能更好地理解

不建议使用
eval
,这样做有风险

看看你是否喜欢我下面的想法

const selector=document.getElementsByClassName('main'))
const path=“:第n个子项(1)”
函数getText(s,p){
if(s.length)//是数组
返回数组.from(s).map(x=>x.querySelector(p)?.textContent???).join(“”);
返回s.querySelector(p)?.textContent;
}
log(getText(选择器,路径))

地狱世界
切换
测试

正如我们在评论中所讨论的,这里有一个解决方案,它采用树参数并从您选择的元素中动态检索属性。或者,如果将深度作为子对象的数量包含在内,则将从该子对象检索道具

示范 鉴于: 需要传递CSS选择器 子元素或空字符串的编号 所需值的属性名称

什么时候: 将这三个给定参数传递给函数

然后: 该函数应该返回由数字标识的子级标识的属性值(如果提供了选择器所选元素的值)

单击“测试”以运行
//注意:没有错误检查-这只是一个演示
函数getValueFromDOM(选择器、子级、属性){
如果(!child){
returndocument.querySelector(`${selector}`)[prop];
} 
return document.querySelector(`${selector}`).querySelector(`n个子(${child})`)[prop];
}
var children=[1,2,3,4];
var output=document.getElementById('output');
功能测试(){
children.forEach(child=>{
const value=getValueFromDOM('.main',child',textContent');
output.innerHTML+=`${value}

`; }); //第二个参数为空-将打印“main” output.innerHTML+=getValueFromDOM('.main',''className')) } document.querySelector('button:last of type')。addEventListener('click',test)

JS-Bin
地狱世界
切换
测试
四
五
六
输出:

@ikiK-这就是OP希望你为他们写的;-);这篇评论让我们读了一本12页的小说(另一个问题),这样他们就可以简明扼要,我想可以省去细节。例如,在代码中,Op传递了选择器[0]。children
同时声明“在我自己的代码中我有”
选择器。children
-那么,Op是否在“我的代码中”使用了不同的选择器呢?我们不知道。这听起来像是一个错误。除了实现我想要的功能的gimmie代码之外,没有要解决的问题的描述。OP应该定义问题,而不是规定如何编写解决方案。我试过了,我要求得到最终结果,所以我希望得到if
x
then
if
y
then
。在HTML上判断之后应该是清楚的。但我没有明白@Randycasburn我明白了我很感激你的努力。但问题不是生成可以用作从元素获取文本的方法的字符串,比方说。似乎问题语句可能是这样的:给定选择器、选择器的哪个子级以及要检索的属性名,生成一个接受这些参数并返回属性值的函数。像这样的,对吗?@RandyCasburn是的,让它工作起来,谢谢!但我担心的是安全,eval有多危险,在我的环境中eval危险吗?我正在写一个Deno模块,获取一个开放的网站。而且你的两个链接是相同的。@Weebonn是的,我不知道,有一些关于它的讨论是的,我想知道如何做到这一点,并记得我在某处看到过它,你应该对此进行更多的研究。在MDN文档中看到,eval可以被其他东西取代,但我无法让它工作。瞧@谢谢你的链接!修复它,检查新代码段更新:不是deno dom问题,也不是deno问题,这在deno中有效:
(新函数(“选择器”、“foo”和“'use strict”;返回(选择器[0]。子[foo]'+bar+'.textContent)”))(选择器,foo)
,请查看原因。代码段中有错误……什么错误?你在说什么?