#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.