You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript+RestCountries API中给人口最多国家加彩色边框

问题:给搜索结果中人口最多的国家添加彩色边框

我正在做一个学校项目,使用JavaScript和RestCountries API实现按语言搜索国家的功能:输入语言后展示对应国家,语言不存在时显示错误提示。现在需要给搜索结果中人口最多的国家对应的div添加彩色边框以突出显示,请问该如何实现?

原始代码

JavaScript代码

const countries = document.querySelector('.countries')
const lang = document.getElementById('search').value
const btn = document.getElementById('btn')


async function getCountries(){
    countries.innerText = ''
    const search = document.querySelector('.search').value;
    const response = await fetch(`https://restcountries.com/v3.1/lang/${search}`,{
        method: "GET",
    });
    
    const data = await response.json();

    if(!response.ok){
        countries.innerText += 'Language doesnt excist. Search again!'
      
    }else {
        data.forEach(api=> {
            showCountry(api)
        })  
    }

    // 此处代码存在错误
    ??const maxPopulation = Math.max(data?.population)
    maxPopulation.forEach(pop =>{
        pop.style.border = 'green'
    })
    }
 

function showCountry(data){
    const country = document.createElement('div')
    country.classList.add('country')
    countries.classList.add('countriesClass')
    country.innerHTML =
    `<div class="country-img">
        <img src="${data?.flags?.png}" alt="">
    </div>
    <div class="country-details">
        <h5 class="countryName">${data?.name?.common}</h5>
        <p><strong>Population:</strong>${data?.population}</p>
        <p><strong>SubRegion:</strong>${data?.subregion}</p>
        <p><strong>Capital:</strong>${data?.capital}</p>
    </div>`
    
    countries.appendChild(country)
     
}

HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://unpkg.com/boxicons@2.1.2/css/boxicons.min.css" rel="stylesheet">
    <link rel="stylesheet" href="style.css">
    <title>Countries</title>
</head>
<body>
    <div class="container">
        <h1>Search country by language!</h1>
    </div>
    <div class="container">
        <div class="controls">
            <i class="bx bx-search"></i>
            <input type="text" placeholder="search by language.." id="search" class="search">
        </div>
        <button id="btn" onclick="getCountries()">Search Country</button>
    </div>
    <div class="countries">
              
    </div>
    <script src="script.js"></script>
</body>
</html>

解决方案

你原代码中计算最大人口的逻辑有误:Math.max(data?.population)无法正确获取最大值,因为data是对象数组,需要先提取所有国家的人口值再计算;且maxPopulation是数值而非数组,不能用forEach遍历。

按以下步骤修改即可实现需求:

  1. 成功获取国家列表后,先计算出最大人口数;
  2. 创建国家元素时,判断当前国家人口是否等于最大值,若是则添加彩色边框;
  3. 推荐用CSS类控制样式,比内联样式更易维护。

修改后的JavaScript代码

const countries = document.querySelector('.countries')
const btn = document.getElementById('btn')

async function getCountries(){
    countries.innerText = ''
    const search = document.querySelector('.search').value;
    const response = await fetch(`https://restcountries.com/v3.1/lang/${search}`,{
        method: "GET",
    });
    
    const data = await response.json();

    if(!response.ok){
        countries.innerText += '语言不存在,请重新搜索!'
    }else {
        // 提取所有国家人口并计算最大值
        const maxPopulation = Math.max(...data.map(country => country.population))
        // 遍历创建元素时传入是否为人口最多国家的标识
        data.forEach(country => {
            showCountry(country, country.population === maxPopulation)
        })  
    }
}

function showCountry(data, isMaxPopulation){
    const country = document.createElement('div')
    country.classList.add('country')
    // 给人口最多的国家添加样式
    if(isMaxPopulation){
        // 方式一:内联样式
        country.style.border = '3px solid #2ecc71'
        // 方式二:添加CSS类(需在style.css中定义)
        // country.classList.add('max-population')
    }
    countries.classList.add('countriesClass')
    country.innerHTML =
    `<div class="country-img">
        <img src="${data?.flags?.png}" alt="${data?.name?.common}国旗">
    </div>
    <div class="country-details">
        <h5 class="countryName">${data?.name?.common}</h5>
        <p><strong>人口:</strong>${data?.population.toLocaleString()}</p>
        <p><strong>次区域:</strong>${data?.subregion}</p>
        <p><strong>首都:</strong>${data?.capital?.[0] || '无'}</p>
    </div>`
    
    countries.appendChild(country)
}

额外优化(可选)

如果用CSS类控制样式,在style.css中添加:

.max-population {
    border: 3px solid #2ecc71;
    box-shadow: 0 0 10px rgba(46, 204, 113, 0.5);
}

同时把showCountry中的内联样式替换为country.classList.add('max-population')即可。

内容的提问来源于stack exchange,提问作者tocajossan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:03:03