Javascript 比较选项值和返回父id时返回未定义的forEach

Javascript 比较选项值和返回父id时返回未定义的forEach,javascript,short-circuiting,htmlcollection,Javascript,Short Circuiting,Htmlcollection,因此,我想获取所有元素,并获取“国家”下拉列表的ID 我有以下内容,它将推送到HTMLcollection中,然后比较第一个选项,通常是“阿富汗”。如果为true,则返回parentName.id的值 这是理论,但我一直没有定义。如有任何见解,将不胜感激 const selectsAvailable = document.getElementsByTagName("select"), countryList = Object.keys(selectsAvailable).

因此,我想获取所有
元素,并获取“国家”下拉列表的ID

我有以下内容,它将
推送到HTMLcollection中,然后比较第一个选项,通常是“阿富汗”。如果为true,则返回parentName.id的值

这是理论,但我一直没有定义。如有任何见解,将不胜感激

const selectsAvailable = document.getElementsByTagName("select"),
            countryList = Object.keys(selectsAvailable).forEach((collectedSelect, i) => {
    selectsAvailable[collectedSelect].options[0].value === 'Afghanistan' && selectsAvailable[collectedSelect].options[0].parentNode.id;
});

console.log("countryList>>>>>>", countryList);

语法似乎有点错误。如果满足条件,使用
.map()
将返回一些内容,但是
.map()
节点列表上不起作用,因此需要将其转换为
数组

.filter()
非常适合这种情况,但它返回的是HTML元素而不是ID,因此我们将继续使用
.map()

此外,您正在通过
元素进行循环,因此不需要遍历到父元素。最后,为了避免非匹配
元素的空数组项,这是
.filter()
非常好的地方,我将ID推送到数组中,而不是在变量中声明函数:

const selectsAvailable=[…document.getElementsByTagName(“select”)];
让countryList=[];
选择savaailable.map(项目=>{
返回项。选项[0]。值=='Afghanistan'?countryList.push(项。id):“”
});
console.log(“countryList>>>>>”,countryList)

阿富汗
非洲
某物
某物

语法似乎有点错误。如果满足条件,使用
.map()
将返回一些内容,但是
.map()
节点列表上不起作用,因此需要将其转换为
数组

.filter()
非常适合这种情况,但它返回的是HTML元素而不是ID,因此我们将继续使用
.map()

此外,您正在通过
元素进行循环,因此不需要遍历到父元素。最后,为了避免非匹配
元素的空数组项,这是
.filter()
非常好的地方,我将ID推送到数组中,而不是在变量中声明函数:

const selectsAvailable=[…document.getElementsByTagName(“select”)];
让countryList=[];
选择savaailable.map(项目=>{
返回项。选项[0]。值=='Afghanistan'?countryList.push(项。id):“”
});
console.log(“countryList>>>>>”,countryList)

阿富汗
非洲
某物
某物

您可以使用foreach循环或映射来实现这一点 错误在于循环内没有返回

希望这有帮助

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8" />
</head>
<body>
    <select id="1">
        <option value="Afghanistan">Afghanistan</option>
        <option value="Italy">Italy</option>
    </select>
    <select id="2">
        <option value="Spain">Spain</option>
        <option value="SriLanka">Sri Lanka</option>
    </select>

</body>
</html>

<script>
    document.addEventListener("DOMContentLoaded", function () {

        var countryList = [];

        const selectsAvailable = document.getElementsByTagName("select");
        Object.keys(selectsAvailable).forEach((collectedSelect, i) => {
            selectsAvailable[collectedSelect].options[0].value === 'Afghanistan' ?
                countryList.push(selectsAvailable[collectedSelect].options[0].parentNode.id) : ''
        });

        console.log("countryList>>>>>>", countryList);
    });

</script>

阿富汗
意大利
西班牙
斯里兰卡
document.addEventListener(“DOMContentLoaded”,函数(){
var countryList=[];
const selectsAvailable=document.getElementsByTagName(“选择”);
Object.key(selectsAvailable).forEach((collectedSelect,i)=>{
selectsAvailable[collectedSelect]。选项[0]。值==“阿富汗”?
countryList.push(selectsAvailable[collectedSelect]。选项[0]。parentNode.id:“”
});
console.log(“countryList>>>>>”,countryList);
});

您可以使用foreach循环或映射来实现这一点 错误在于循环内没有返回

希望这有帮助

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8" />
</head>
<body>
    <select id="1">
        <option value="Afghanistan">Afghanistan</option>
        <option value="Italy">Italy</option>
    </select>
    <select id="2">
        <option value="Spain">Spain</option>
        <option value="SriLanka">Sri Lanka</option>
    </select>

</body>
</html>

<script>
    document.addEventListener("DOMContentLoaded", function () {

        var countryList = [];

        const selectsAvailable = document.getElementsByTagName("select");
        Object.keys(selectsAvailable).forEach((collectedSelect, i) => {
            selectsAvailable[collectedSelect].options[0].value === 'Afghanistan' ?
                countryList.push(selectsAvailable[collectedSelect].options[0].parentNode.id) : ''
        });

        console.log("countryList>>>>>>", countryList);
    });

</script>

阿富汗
意大利
西班牙
斯里兰卡
document.addEventListener(“DOMContentLoaded”,函数(){
var countryList=[];
const selectsAvailable=document.getElementsByTagName(“选择”);
Object.key(selectsAvailable).forEach((collectedSelect,i)=>{
selectsAvailable[collectedSelect]。选项[0]。值==“阿富汗”?
countryList.push(selectsAvailable[collectedSelect]。选项[0]。parentNode.id:“”
});
console.log(“countryList>>>>>”,countryList);
});

forEach
不返回任何内容查看
filter
map
forEach
不返回任何内容查看
filter
map
更清晰我刚刚意识到我甚至没有返回任何内容,因为我正在使用一个条件将某些内容推送到数组中
.forEach()
在这种情况下确实有效。@我更清楚地意识到我甚至没有返回任何东西,因为我正在使用一个条件将某些东西推送到数组中<我认为code>.forEach()
在这种情况下确实有效。