首页 > 解决方案 > Javascript JSON DOM 选择器:如何告诉 JS 根据 html 选择器从 JSON 中过滤一些卡片?

问题描述

所以基本上我有一个代表泰坦尼克号中的人(乘客)的 JSON,我必须根据您对 HTML 选择器所做的选择,通过部分 JSON(已上船)的字符串值过滤它们。所以每个人都在不同的港口(登船)上船,我需要使用 HTML 选择器(id="embarkSelect")根据他们进入的港口过滤他们。

这是一个 JSON 数组:

'use strict';
let passengers = [{
        "PassengerId": 1,
        "Survived": 0,
        "Pclass": 3,
        "Name": "Braund, Mr. Owen Harris",
        "Sex": "male",
        "Age": 22,
        "SibSp": 1,
        "Parch": 0,
        "Ticket": "A/5 21171",
        "Fare": 7.25,
        "Cabin": "",
        "Embarked": "S"
    },

Embarked 是我需要使用的值

这是我的 HTML:

<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
    <script src="https://kit.fontawesome.com/74f80d89fd.js" crossorigin="anonymous"></script>
    <link rel="stylesheet" href="css/style.css">
    <title>Document</title>
</head>

<body>
    <!-- Search form -->
    <form>
        <div class="form-group">
        </div>
        <div class="form-group">
            <select class="form-control" id="embarkSelect">
            <option>Choose</option>
            <option>C = Cherbourg</option>
            <option>Q = Queenstown</option>
            <option>S = Southampton</option>
          </select>
        </div>
    </form>

    <input type="text" id="txtFiltro">
    <section id="sctCards">

    </section>

    <script src="js/passengers.js"></script>
    <script src="js/logic.js"></script>


    <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script>

</body>

</html> 

这是我的主要 JS:

               'use strict';
const seccCards = document.querySelector('#sctCards');
const inputFiltro = document.querySelector('#txtFiltro');

const imprimirCards = () => {
    seccCards.innerHTML = '';
    let filtro = inputFiltro.value.toLowerCase();
    passengers.forEach(obj_passenger => {
        if (obj_passenger.Name.toLowerCase().includes(filtro)) {
            let card = document.createElement('div');
            card.classList.add('card');


            let passengerbeen = document.createElement('h2');

            passengerbeen.innerText = obj_passenger.Name;
            if (obj_passenger.Survived == 0) {
                passengerbeen.classList.add('fas');
                passengerbeen.classList.add('fa-skull');
            }


            let passengerF = document.createElement('p');
            var survivalStatus;
            if (obj_passenger.Survived == 1) {
                survivalStatus = "sobrevivio";
            } else {
                survivalStatus = "fallecido";
            }
            passengerF.innerHTML = survivalStatus;


            let voyage = document.createElement('p');
            var voyageEmbark = " ";
            if (obj_passenger.Embarked == "C") {
                voyageEmbark = "Cherbourg";

            } else if (obj_passenger.Embarked == "Q") {
                voyageEmbark = "Queenstown";
            } else {
                voyageEmbark = "Southampton";
            }

            voyage.innerHTML = voyageEmbark;
            if (obj_passenger.Embarked == ("C") && obj_passenger.Survived === 1) {
                passengerbeen.classList.add('cSurvived');
            } else if (obj_passenger.Embarked == ("C") && obj_passenger.Survived === 0) {
                passengerbeen.classList.add('cDied');

            } else if (obj_passenger.Embarked == ("Q") && obj_passenger.Survived === 1) {
                passengerbeen.classList.add('qSurvived');
            } else if (obj_passenger.Embarked == ("Q") && obj_passenger.Survived === 0) {
                passengerbeen.classList.add('qDied');
            } else if (obj_passenger.Embarked == ("S") && obj_passenger.Survived === 1) {
                passengerbeen.classList.add('sSurvived');
            } else {
                passengerbeen.classList.add('sDied');
            }



            let passengerSex = document.createElement('p');
            var passengerGender;
            if (obj_passenger.sex == "male") {
                passengerGender = "hombre";
            } else {
                passengerGender = "mujer";
            }
            passengerSex.innerHTML = passengerGender;
            let passengerAge = document.createElement('p');
            var passengerAgeMystery = " ";
            if (obj_passenger.Age.length < 1) {
                passengerAgeMystery = "Edad desconocida";


            } else {
                passengerAgeMystery = obj_passenger.Age;
            }

            passengerAge.innerHTML = passengerAgeMystery;




            card.appendChild(passengerbeen);
            card.appendChild(passengerF);
            card.appendChild(passengerSex);
            card.appendChild(passengerAge);
            card.appendChild(voyage);
            seccCards.appendChild(card);

        }

    });
};

//function filterEmbark

inputFiltro.addEventListener('keyup', imprimirCards);
imprimirCards();

所以我需要知道如何使用 HTML 选择器的(id="embarkSelect") 选择值 (Embark) 连接 HTML 选择器和 JS 以过滤 (Passengers)

标签: javascriptarraysjsondom

解决方案


推荐阅读