简体   繁体   English

遍历dom嵌套对象

[英]Traversing the dom for nested objects

I have nested inputs in my html which I am trying to get the value of. 我在我试图获取其值的html中嵌套了输入。 I've tried many methods with no luck. 我已经尝试了很多方法,但是没有运气。 I want to get the value of all the inputs into different variables in my javascript file. 我想将所有输入的值转换成我的javascript文件中的不同变量。

This is my HTML : 这是我的HTML:

<html lang="en">

<head>
    <title>HotGym</title>
    <meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta http-equiv="content-language" content="he">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
    <meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
    <link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="css/master.css">
    <link rel="stylesheet" type="text/css" href="css/addTrainee.css">
    <link rel="shortcut icon" href="imgs/icon.png" type="image/x-icon">

</head>

<body>
    <div class="addNav"></div>
    <div class="pages">
        <div class="page">
            <h2 class="headline">Adding Trainee</h2>
            <div class="add_trainee">
                <form>
                    <div class="inp">
                        <p>Full name</p>
                        <input spaceholder="please enter fullname" type="text" class="fullName">
                    </div>
                    <div class="inp">
                        <p>Gender</p>
                        <input spaceholder="please  enter" type="text" class="gender">
                    </div>
                    <div class="inp">
                        <p>Age</p>
                        <input require spaceholder="please enter fullname" type="number" class="age">
                    </div>
                    <div class="inp">
                        <p>Phone number</p>
                        <input spaceholder="please enter fullname" type="text" class="phoneNumber">
                    </div>
                    <div class="inp">
                        <p>Adress</p>
                        <input spaceholder="please enter fullname" type="text" class="adress">
                    </div>
                    <div class="inp">
                        <p>Medical assurance Date</p>
                        <input spaceholder="please enter fullname" type="date" class="dateMedicalAssuranceEnd">
                    </div>
                    <div class="inp">
                        <p>Date start memebership</p>
                        <input spaceholder="please enter fullname" type="date" class="dateMembershipStart">
                    </div>
                    <div class="inp">
                        <p>Date end memebership</p>
                        <input spaceholder="please enter fullname" type="date" class="dateMembershipEnd">
                    </div>
                    <div class="inp">
                        <input class="addTrainee" type="submit" name="submit" value="save">
                    </div>
                </form>
            </div>
            <script src="jquery/dist/jquery.js"></script>
            <script src="js/add-trainee-main.js" type="module"></script>
</body>

</html>

my jquery looks like this : the 'addBtn' is correct , and iv tryed many methods from here : 我的jQuery看起来像这样:'addBtn'是正确的,并且iv从这里尝试了许多方法:

https://api.jquery.com/category/traversing/ https://api.jquery.com/category/traversing/

 handleAddTrainee() {
        // console.log(this);
        let addBtn = $('.addTrainee');
        // console.log(addBtn)
        debugger
        // $('.addTrainee').on('click', () => {
        // let $traineeForm = $(this).closest('.trainee-from') // need to know the way you orginized the html.

        // cetch trainee data 

        //----
        let fullName = addBtn.closest('.add_trainee').find('.inp').find('input.fullName').val();
        let gender = $(this).closest('.gender').val();
        let age = $(this).closest('.age').val();
        let phoneNumber = $(this).closest('.phoneNumber').val();
        let adress = $(this).closest('.adress').val();
        let dateMedicalAssuranceEnd = $(this).closest('.dateMedicalAssuranceEnd').val();
        let dateMembershipStart = $(this).closest('.dateMembershipStart').val();
        let dateMembershipEnd = $(this).closest('.dateMembershipEnd').val();
        //-----
        let traineeForm = {
            fullName: fullName,
            gender: gender,
            age: age,
            phoneNumber: phoneNumber,
            adress: adress,
            dateMedicalAssuranceEnd: dateMedicalAssuranceEnd,
            dateMembershipStart: dateMembershipStart,
        }
        this.gymRepo.addTrainee(traineeForm).then(() => {
                alert("new trainee as been saved");
            })
            // })
    }

you are using jquery so why don't you use some thing like that 您正在使用jQuery,为什么不使用类似的东西

$(':input').each(function(){
if($(this).hasClass('addTrainee'))
    return;
console.log($(this).val() );
});

this will get you the values of all the input except for the save button 这将为您获取所有输入的值(保存按钮除外)

I would use @aa-Ahmed-aa answer with a more complete example. 我将使用@ aa-Ahmed-aa答案以及更完整的示例。

const recoverValues = function() {
  const values = {};

  $(':input').each(function(){
  if($(this).hasClass('addTrainee'))
    return;
  // very ugly code
  values[$(this).attr('class')] = $(this).val();
  });

  return values;
}

So that you can retrieve a good looking json for all your inputs except the submit button. 这样您就可以为除了提交按钮之外的所有输入检索一个漂亮的json。

PS: I like the spaceholder ;) PS:我喜欢太空人;)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM