Основная проблема с кодом, который вы показали, состоит в том, что вы используете find()
, однако li
, который вы пытаетесь получить, это root объекты в HTML, поэтому вам нужно вместо этого используйте filter()
.
Оттуда вы можете использовать map()
для создания массива объектов, содержащих данные, которые вам нужно извлечь из li
:
let bgRe = /^url\((['"]?)(.*)\1\)$/
let data = $(strVar).filter("li").map(function() {
let $li = $(this);
return {
id: this.id,
bgImageUrl: bgRe.exec($li.find('.ex_thumbnail').css('background-image'))[2],
reports: $li.find('.task_name').text().trim(),
items: $li.find('.training_text').text().trim(),
video: $li.find('.video').val()
}
}).get();
function MyFunction() {
var strVar = "";
strVar += "<li class=\"tasks\" id=\"1\">";
strVar += "";
strVar += "<div style=\"background-image:url(https:\/\/website.com\/image1.jpg);overflow:visible; z-index:2; position:relative;\" class=\"ex_thumbnail\">";
strVar += " <div class=\"float-right\"><\/div>";
strVar += " <img class=\"vipicon\" src=\"https:\/\/www.awebsite.com\/vip.svg\"\/> ";
strVar += " <\/div>";
strVar += " <div class=\"task_texts \"";
strVar += " style=\"\"";
strVar += " >";
strVar += " <div class=\"task_name\">writing reports<\/div>";
strVar += " <div class=\"training_text\">for items sold<\/div>";
strVar += " <\/div>";
strVar += " <input type=\"hidden\" class=\"image1\" value=\"11.jpg\"\/>";
strVar += " <input type=\"hidden\" class=\"tools\" value=\"adobe photshop\"\/>";
strVar += " <input type=\"hidden\" class=\"video\" value=\"1.mp4\"\/> ";
strVar += " <input type=\"hidden\" class=\"thumbnail\" value=\"14.jpg\"\/>";
strVar += "";
strVar += "<\/li>";
strVar += "";
strVar += "<li class=\"tasks\" id=\"2\">";
strVar += "";
strVar += "<div style=\"background-image:url(https:\/\/website.com\/image2.jpg);overflow:visible; z-index:2; position:relative;\" class=\"ex_thumbnail\">";
strVar += " <div class=\"float-right\"><\/div>";
strVar += " <img class=\"vipicon\" src=\"https:\/\/www.awebsite.com\/vip.svg\"\/> ";
strVar += " <\/div>";
strVar += " <div class=\"task_texts \"";
strVar += " style=\"\"";
strVar += " >";
strVar += " <div class=\"task_name\">drawing<\/div>";
strVar += " <div class=\"training_text\">using oil paint<\/div>";
strVar += " <\/div>";
strVar += " <input type=\"hidden\" class=\"image1\" value=\"12.jpg\"\/>";
strVar += " <input type=\"hidden\" class=\"tools\" value=\"brush\"\/>";
strVar += " <input type=\"hidden\" class=\"video\" value=\"2.mp4\"\/> ";
strVar += " <input type=\"hidden\" class=\"thumbnail\" value=\"15.jpg\"\/>";
strVar += "";
strVar += "<\/li>";
let bgRe = /^url\((['"]?)(.*)\1\)$/
let data = $(strVar).filter("li").map(function() {
let $li = $(this);
return {
id: this.id,
bgImageUrl: bgRe.exec($li.find('.ex_thumbnail').css('background-image'))[2],
reports: $li.find('.task_name').text().trim(),
items: $li.find('.training_text').text().trim(),
video: $li.find('.video').val()
}
}).get();
console.log(data);
}
MyFunction();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>