-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgetInnerHTMLById.js
73 lines (68 loc) · 4.57 KB
/
getInnerHTMLById.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
function getInnerHTMLById(htmlString, id) {
let allTagsFindRegExp = new RegExp("<(\"[^\"]*\"|'[^']*'|[^'\">])*?>([^<])*", "ig");
let findElementByIdRegExp = new RegExp("<(.*id *= *\"" + id + " *\".*)*>", "ig");
let openTagRegExp = new RegExp("<[a-z0-9]+ *", "ig");
let closeTagRegExp = new RegExp("<\/[a-z0-9]+ *", "ig");
let singleTagRegExp = new RegExp("<[a-z0-9]+ *", "ig");
let singleTagArray = ["img", "br", "hr", "area", "base", "col", "embed", "input", "keygen", "link", "menuitem", "meta", "param", "source", "track", "wbr"];
let tagsArray = htmlString.match(allTagsFindRegExp);
if(tagsArray !== null) {
let idIndex = 0;
let lastIndexOfTags = 0;
let isNoElementById = true;
for(let i = 0; i < tagsArray.length; i++) {
if(tagsArray[i].match(findElementByIdRegExp)) {
idIndex = i;
isNoElementById = false;
let checkupArrayOfTags = [];
let countOfOpenTags = 0;
let countOfCloseTags = 0;
checkupArrayOfTags.push(tagsArray[i]);
countOfOpenTags++;
for(let j = idIndex + 1; j < tagsArray.length; j++) {
currentTag = tagsArray[j];
if(checkupArrayOfTags.length > 0) {
if(currentTag.match(openTagRegExp)) {
if(!singleTagCheck(currentTag)) {
countOfOpenTags++;
}
}
if(currentTag.match(closeTagRegExp)) {
countOfCloseTags++;
lastIndexOfTags = j;
}
if(countOfCloseTags == countOfOpenTags) {
break;
}
}
}
}
}
if(isNoElementById){
console.log('no matches with id = '+ id);
return false;
}else{
return(splitResultArrayOfHTML(tagsArray, idIndex, lastIndexOfTags));
}
} else {
return 'Not valid html string';
}
function splitResultArrayOfHTML(arrayOfTags, firstIndex, lastIndex) {
let resultHTML = '';
for(let i = firstIndex+1; i <= lastIndex-1; i++) {
resultHTML += arrayOfTags[i];
}
return resultHTML;
}
function singleTagCheck(tag) {
tag = tag.match(singleTagRegExp).join().trim().replace('<', '');
for(let i = 0; i < singleTagArray.length; i++) {
if(tag == singleTagArray[i]) {
return true;
}
}
return false;
}
}
var testHtmlString = '<div class="showNews"><div class="breadCrumbWrapper textStandart m--breadCrumbWrapper-withPadding"><div class="breadCrumb"><ul class="breadCrumb__list"><li class="breadCrumb__element"> <a href="/">радио 100</a></li><li class="breadCrumb__element"> <a href="/novosti/">Новости</a></li></ul></div></div><div class="twoColumsContent"><div class="twoColumsContent__wrapper"><div class="twoColumsContent__firstColumn"><div class="oneColumnHeader textStandart"><h1>Группа ABBA записала новые песни</h1></div><div id="test2" class="headerImageBlock"> <img src="/files/images/2804abba.jpg" alt="Изображение новости"></div></div><div class="twoColumsContent__secondColumn m--secondColumn-bgGrey"><div class="textBlockContent textStandart"><div class="dateBlock "> 2018/04/28</div><p>Шведский квартет ABBA анонсировал выход двух новых песен, сообщается в Instagram музыкантов.</p><p>«Мы вчетвером почувствовали, что после 35 лет будет весело снова собраться и поработать в звукозаписывающей студии. И мы сделали это. И нам показалось, что ничего как будто не поменялось за все это время, а мы всего лишь ушли в короткий отпуск», — говорится в посте.</p><p >Участники группы объявили, что им удалось записать две песни. Одну из композиций, которая получила название I Still Have Faith In You, проиграют по телевидению в декабре. Релизом займутся «Би-би-си» и NBC. «Мы, может, уже совсем зрелые, но песня — новая. И это здорово», — отметили музыканты.</p><p>В октябре 2016 года ABBA объявила о воссоединении. Последнее официальное выступление группы состоялось в 1982-м, однако в июне 2016 года ABBA сыграла на частном гала-вечере в Стокгольме.</p><p> </p><p>Фото: <a href="https://www.newsmax.com/" target="_blank">newsmax.com</a></p></div></div></div></div></div>';
console.log(getInnerHTMLById(testHtmlString, 'test2'));