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

在JavaScript中实现数组指定字段出现后添加换行

解决AQI数据按州分隔换行的问题

你的代码当前的问题是:每个非第一个州的城市都会被插入换行,而非在整个州的内容结束后添加分隔。原因是displayCity函数每次处理单个城市就会执行换行判断,没有区分“同一个州的城市”和“不同州的城市”的边界,同时API回调是异步的,顺序也可能不受控。

下面提供两种可行的解决方案:

方案一:跟踪上一个渲染的州名,按需插入分隔

通过记录上一次渲染的州名称,当当前要渲染的城市所属州与上一个不同时,在当前城市前插入换行分隔:

// 新增变量记录上一个完成渲染的州
let lastRenderedState = null;
var multipleCityAqiElement = document.getElementById('multiple-city-aqi');

function displayCity(aqi, stateTitle) {
    var cityAqiWidget = document.createElement('div');
    cityAqiWidget.className = 'city-aqi-widget';
    cityAqiWidget.innerHTML = '<h2>' + stateTitle + '</h2>' + aqi.text("%details<br><br>");
    
    // 仅当切换到新州时插入分隔
    if (lastRenderedState !== null && lastRenderedState !== stateTitle) {
        var stateSeparator = document.createElement('div');
        stateSeparator.style.clear = 'both';
        // 可选:添加类名方便自定义样式
        stateSeparator.className = 'state-separator';
        multipleCityAqiElement.appendChild(stateSeparator);
    }
    
    multipleCityAqiElement.appendChild(cityAqiWidget);
    // 更新记录的上一个州
    lastRenderedState = stateTitle;
}

方案二:按州创建容器,结构化组织内容

这种方法更语义化,先为每个州创建独立的容器,将该州所有城市的AQI内容放入对应容器,通过CSS即可轻松实现州之间的分隔:

var states = [
    {
        title: "Wilayah Persekutuan",
        cities: ["kuala-lumpur", "malaysia/w.p.-putrajaya/putrajaya", "malaysia/wilayah-persekutuan/labuan"]
    },
    {
        title: "Perak",
        cities: ["ipoh", "malaysia/perak/tanjung-malim"]
    },
    ...
];

var aqiWidgetConfig = [];
var multipleCityAqiElement = document.getElementById('multiple-city-aqi');

// 预先创建所有州的容器并存储
const stateContainers = {};
states.forEach(state => {
    const stateContainer = document.createElement('div');
    stateContainer.className = 'state-container';
    // 仅渲染一次州标题,避免重复
    stateContainer.innerHTML = `<h2>${state.title}</h2>`;
    multipleCityAqiElement.appendChild(stateContainer);
    stateContainers[state.title] = stateContainer;
});

// 配置API回调
states.forEach(function(state) {
    state.cities.forEach(function(city) {
        aqiWidgetConfig.push({
            city: city,
            callback: function(aqi) {
                displayCity(aqi, state.title);
            }
        });
    });
});

_aqiFeed(aqiWidgetConfig);

function displayCity(aqi, stateTitle) {
    var cityAqiWidget = document.createElement('div');
    cityAqiWidget.className = 'city-aqi-widget';
    cityAqiWidget.innerHTML = aqi.text("%details<br><br>");
    // 将城市内容放入对应州的容器
    stateContainers[stateTitle].appendChild(cityAqiWidget);
}

然后在CSS中添加州容器的分隔样式:

.state-container {
    margin-bottom: 20px; /* 州之间的间距 */
    clear: both;
}

这种方案的优势是结构清晰,后续维护州级别的样式或功能会更方便,也避免了异步回调带来的顺序问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:49:53