Как вернуть массив с одного уровня элементов в Cheerio? - PullRequest
0 голосов
/ 27 января 2020

Как бы вы вернули массив из элементов на одном уровне? Точка в правильном направлении была бы отличной. TIA

Вот HTML код, над которым я работаю ============================

        <div class="quiz-area">
                <div class="question-list" id="question-1" style="display: block;">
                    <div class="question-content">Select which is a mammal</div>
                    <input id="question_id_1" type="hidden" name="question_1" value="1">
                    <div>
                        <label for="answer-id-1" id="answer-label-1" class="answer">
                            <input type="radio" name="answer-1" id="answer-id-1" class="answer wrong-answer-label">Frog
                        </label>
                    </div>
                    <div>
                        <label for="answer-id-2" id="answer-label-2" class="answer">
                            <input type="radio" name="answer-2" id="answer-id-2" class="answer wrong-answer-label">Chicken
                        </label>
                    </div>
                    <div>
                        <label for="answer-id-3" id="answer-label-3" class="answer">
                            <input type="radio" name="answer-3" id="answer-id-3" class="answer wrong-answer-label">Tree
                        </label>
                    </div>
                    <div>
                        <label for="answer-id-4" id="answer-label-4" class="answer">
                            <input type="radio" name="answer-4" id="answer-id-4" class="answer right-answer-label">Dog
                        </label>
                    </div>
                </div>    
        </div>   
request(url, function(error, response, html){
    $('.question-list').each((i, el)=>{

                    let question = $(el)
                    .find('.question-content')
                    .text()
                    .trim();

                    let correct = $(el)
                    .find('.correct-answer-label')
                    .text()
                    .trim();

                     let answers = $(el)
                    .find('.answer')
                    .text()
                    .trim()

    )};
)};
JSON

I'm getting:
[
   {
      "question": "Select which is a mammal.",
      "answers": "Frog\n   \n     Chicken\n      \n       Tree \n Dog",
      "correct": "Dog"
   }
]
I was expecting:
[
    {
        "question": "Select which is a mammal.",
        "wrong": "Frog", "Chicken", "Tree", "Dog"
        "correct": "Dog"
    }
]

Мне удалось найти грязное решение, хотя я получаю пустой элемент в массиве. Просто сделал фильтр, чтобы избавиться от пустого элемента. Если вы можете улучшить его, я буду очень признателен.

===============================

  let answers = $(el)
      .find('.answer').toArray().map(function(x) {
    return $(x).text().trim().replace(/\s\s+/g,'');
  });

   answerList = answers.filter(Boolean)
 console.log(answerList)
======================================

1 Ответ

0 голосов
/ 28 января 2020
str_answers = $('label.answer').text()

arr_answers = str_answers.trim().split(/\s+/)

console.log(arr_answers)

см. Работает: https://jsfiddle.net/RASG/2js1ovfk/

str_answers = $('label.answer').text()

console.log(str_answers)


arr_answers = str_answers.trim().split(/\s+/)

console.log(arr_answers)


alert(arr_answers)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="quiz-area">
  <div class="question-list" id="question-1" style="display: block;">
    <div class="question-content">Select which is a mammal</div>
    <input id="question_id_1" type="hidden" name="question_1" value="1">
    <div>
      <label for="answer-id-1" id="answer-label-1" class="answer">
        <input type="radio" name="answer-1" id="answer-id-1" class="answer wrong-answer-label">Frog
      </label>
    </div>
    <div>
      <label for="answer-id-2" id="answer-label-2" class="answer">
        <input type="radio" name="answer-2" id="answer-id-2" class="answer wrong-answer-label">Chicken
      </label>
    </div>
    <div>
      <label for="answer-id-3" id="answer-label-3" class="answer">
        <input type="radio" name="answer-3" id="answer-id-3" class="answer wrong-answer-label">Tree
      </label>
    </div>
    <div>
      <label for="answer-id-4" id="answer-label-4" class="answer">
        <input type="radio" name="answer-4" id="answer-id-4" class="answer right-answer-label">Dog
      </label>
    </div>
  </div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...