Получение данных из html-строки и отправка в массив

#javascript

#язык JavaScript

Вопрос:

Итак, я делаю запрос на публикацию, и ответ представляет собой строку html, и я пытаюсь получить данные из "dropUser" части строки html, но у меня возникли небольшие проблемы, и я надеялся, что, может быть, кто-нибудь сможет мне помочь или указать мне правильное направление.

Моя цель-получить данные из "dropUser" html-строки и перенести их в массив.

Например, идентификатор 4289985 и имя пользователя «MeowCat» я хочу получить их все и поместить в массив.

 let str = `lt;div id="container_user"gt;  lt;div class="user_count"gt;  lt;div class="bcell"gt;  Online lt;span class="ucount back_theme"gt;4lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;div class="online_user"gt;  lt;div onclick="dropUser(this,5,'ChatAveBot',1,1,'ZZ','','0','');" class="avtrig user_item "gt;  lt;div class="user_item_avatar"gt;lt;img class="avav acav avsex nosex " src="/avatar/default_avatar.png" /gt; lt;/divgt;  lt;div class="user_item_data"gt;  lt;p class="username user "gt;ChatAveBotlt;/pgt;  lt;/divgt;  lt;div class="user_item_icon icrank"gt;lt;img src="default_images/rank/bot.svg" class="list_rank" title="Bot" /gt;lt;/divgt;  lt;/divgt;  lt;div onclick="dropUser(this,3754679,'Fantastic',1,0,'ZZ','','14','');" class="avtrig user_item "gt;  lt;div class="user_item_avatar"gt;lt;img class="avav acav avsex nosex " src="/avatar/avatar_user3754679_1638955491.jpg" /gt; lt;/divgt;  lt;div class="user_item_data"gt;  lt;p class="username bcolor1 bnfont7"gt;Fantasticlt;/pgt;  lt;p class="text_xsmall bustate bellips"gt;TheDD7デイビスになる =🚮lt;/pgt;  lt;/divgt;  lt;/divgt;  lt;div onclick="dropUser(this,4290052,'cefefef',0,0,'AU','','13','');" class="avtrig user_item "gt;  lt;div class="user_item_avatar"gt;lt;img class="avav acav avsex nosex " src="/avatar/default_guest.png" /gt; lt;/divgt;  lt;div class="user_item_data"gt;  lt;p class="username user "gt;cefefeflt;/pgt;  lt;/divgt;  lt;/divgt;  lt;div onclick="dropUser(this,4289985,'MeowCat',0,0,'AU','','13','');" class="avtrig user_item "gt;  lt;div class="user_item_avatar"gt;lt;img class="avav acav avsex nosex glob_av" src="/avatar/default_guest.png" /gt; lt;/divgt;  lt;div class="user_item_data"gt;  lt;p class="username user "gt;MeowCatlt;/pgt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;div class="clear"gt;lt;/divgt; lt;/divgt;`;  let data = []; //let info = str.split(`'`).forEach(e =gt; e.includes("dropUser")); console.log(str.split(`'`)); 

Ответ №1:

попробуйте это:

 const htmlStr = `lt;div id="container_user"gt;  lt;div class="user_count"gt;  lt;div class="bcell"gt;  Online lt;span class="ucount back_theme"gt;4lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;div class="online_user"gt;  lt;div onclick="dropUser(this,5,'ChatAveBot',1,1,'ZZ','','0','');" class="avtrig user_item "gt;  lt;div class="user_item_avatar"gt;lt;img class="avav acav avsex nosex " src="/avatar/default_avatar.png" /gt; lt;/divgt;  lt;div class="user_item_data"gt;  lt;p class="username user "gt;ChatAveBotlt;/pgt;  lt;/divgt;  lt;div class="user_item_icon icrank"gt;lt;img src="default_images/rank/bot.svg" class="list_rank" title="Bot" /gt;lt;/divgt;  lt;/divgt;  lt;div onclick="dropUser(this,3754679,'Fantastic',1,0,'ZZ','','14','');" class="avtrig user_item "gt;  lt;div class="user_item_avatar"gt;lt;img class="avav acav avsex nosex " src="/avatar/avatar_user3754679_1638955491.jpg" /gt; lt;/divgt;  lt;div class="user_item_data"gt;  lt;p class="username bcolor1 bnfont7"gt;Fantasticlt;/pgt;  lt;p class="text_xsmall bustate bellips"gt;TheDD7デイビスになる =🚮lt;/pgt;  lt;/divgt;  lt;/divgt;  lt;div onclick="dropUser(this,4290052,'cefefef',0,0,'AU','','13','');" class="avtrig user_item "gt;  lt;div class="user_item_avatar"gt;lt;img class="avav acav avsex nosex " src="/avatar/default_guest.png" /gt; lt;/divgt;  lt;div class="user_item_data"gt;  lt;p class="username user "gt;cefefeflt;/pgt;  lt;/divgt;  lt;/divgt;  lt;div onclick="dropUser(this,4289985,'MeowCat',0,0,'AU','','13','');" class="avtrig user_item "gt;  lt;div class="user_item_avatar"gt;lt;img class="avav acav avsex nosex glob_av" src="/avatar/default_guest.png" /gt; lt;/divgt;  lt;div class="user_item_data"gt;  lt;p class="username user "gt;MeowCatlt;/pgt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;div class="clear"gt;lt;/divgt; lt;/divgt;`;  function getUsers(str) {  let div = document.createElement("div");  div.innerHTML = str;  return [...div.querySelectorAll('.user_item')].map(item =gt; {  let id = item.getAttribute('onclick').split(',')[1];  let username = item.querySelector('.username').innerHTML;  return {username, id};  }) }; console.log(getUsers(htmlStr)); 

Комментарии:

1. это гораздо забавнее, чем делать литкод… ЛОЛ

2. Спасибо, это на 100% то, чего я пытался достичь, я действительно ценю это.

Ответ №2:

Я добавил два новых атрибута в каждый раздел user_item для чтения из html-строки в виде текста. найдите идентификатор данных в этом html-файле.

 let str =`lt;div id="container_user"gt;  lt;div class="user_count"gt;  lt;div class="bcell"gt;  Online lt;span class="ucount back_theme"gt;4lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;div class="online_user"gt;  lt;div onclick="dropUser(this,5,'ChatAveBot',1,1,'ZZ','','0','');" class="avtrig user_item " data-id="1" data-name="ChatAveBot"gt;  lt;div class="user_item_avatar"gt;lt;img class="avav acav avsex nosex " src="/avatar/default_avatar.png" /gt; lt;/divgt;  lt;div class="user_item_data"gt;  lt;p class="username user "gt;ChatAveBotlt;/pgt;  lt;/divgt;  lt;div class="user_item_icon icrank"gt;lt;img src="default_images/rank/bot.svg" class="list_rank" title="Bot" /gt;lt;/divgt;  lt;/divgt;   lt;/divgt;  lt;div class="clear"gt;lt;/divgt; lt;/divgt;`;  

Вот скрипт для отправки всех в массив

 const Users = [];  $.each($(str).find('.user_item'), (userIndex, User) =gt; {  let _user = {};  _user.id = $(User).attr('data-id');  _user.Name = $(User).attr('data-name');  Users.push(_user);  });  

Ответ №3:

Одно из решений, которое я могу предложить, поскольку в исходном сообщении говорилось, что аргументы, переданные функции dropUser, должны быть помещены в массив. Это решение использует регулярные выражения и небольшие манипуляции со строками.

 var regex=/dropUser([A-Za-z0-9,'"]*)/g; var result=str.match(regex); var argumentsArray = new Array();  result.forEach(input =gt;{ input = input.replace("dropUser(",""); input = input.replace(')',''); argumentsArray.push(input) }) console.log(argumentsArray) //this will be a 2D array.  

после этого вы сможете извлечь имя пользователя и идентификатор, а не читать с метки .username.