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

Pokemon API实现点击按钮在新页面展示宝可梦详情的问题

问题解决:点击宝可梦卡片按钮在新页面展示详情

你的核心问题是:当前代码里调用detailsPokemon修改的是index.html页面的DOM元素,但window.open打开的details.html是独立的新页面,两个页面的DOM环境完全分离,导致详情无法传递过去。下面是直接可行的解决方案:


步骤1:修改主页面的跳转逻辑

修改App.js中的seeDetail函数,不再在主页面请求数据,而是通过URL参数把宝可梦ID传递给详情页面:

function seeDetail(id){
    // 将ID作为URL参数传递给详情页
    window.open(`details.html?id=${id}`, '_blank');
}

步骤2:完善详情页面结构

原Details.html缺少完整的HTML文档结构,补充后才能正常加载JS和渲染内容:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Detalle de Pokémon</title>
    <!-- 可引入和index.html相同的CSS文件,保持样式统一 -->
</head>
<body>
    <div id="details" >
        <h2>Pokemon Details</h2>
        <div class="more-details"></div>
    </div>
    <!-- 引入详情页专属的JS文件 -->
    <script src="details.js"></script>
</body>
</html>

步骤3:创建详情页专属JS文件

新建details.js,负责从URL获取ID、请求API数据并渲染详情:

const detailsContainer = document.querySelector('.more-details');
const endPoint = "https://pokeapi.co/api/v2/pokemon/";

// 从URL中提取宝可梦ID
function getPokemonId() {
    const urlParams = new URLSearchParams(window.location.search);
    return urlParams.get('id');
}

// 渲染完整的宝可梦详情
function renderDetails(poke) {
    detailsContainer.innerHTML = `
        <div class="card-pokemon">
            <span>ID: ${poke.id}</span>
            <div class="img">
                <img src="${poke.sprites.other["official-artwork"].front_default}" alt="${poke.name}">
            </div>
            <h2 class="pokemon-nombre">${poke.name}</h2>
            <div class="info">
                <p>Tipo de Pokemon:</p>
                ${poke.types.map(type => `<p>${type.type.name}</p>`).join('')}
                <p>Habilidades:</p>
                ${poke.abilities.map(ability => `<p>${ability.ability.name}</p>`).join('')}
                <div class="stats">
                    <p>${poke.height}m</p>
                    <p>${poke.weight}kg</p>
                </div>
                <p>Experiencia base: ${poke.base_experience}</p>
            </div>
        </div>
    `;
}

// 页面加载完成后自动获取数据并渲染
document.addEventListener('DOMContentLoaded', () => {
    const pokemonId = getPokemonId();
    if (pokemonId) {
        fetch(endPoint + pokemonId)
            .then(res => res.json())
            .then(data => renderDetails(data))
            .catch(err => console.error('Error al cargar detalles:', err));
    }
});

原理说明

  1. 主页面通过URL参数?id=xxx把宝可梦ID传递给详情页,这是跨页面传递简单数据的最直接方式
  2. 详情页加载时,从URL中提取ID,独立发起API请求获取数据并渲染,避免了跨页面DOM操作的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:37:01