удаление элементов с условием
Есть условие, необходимо удалять элементы порядковый номер которых делится на 4 с остатком 3.
http://jsbin.com/roneqax/edit?html,js,console,output я написал код, он должен удалить 3 и 7 элемент по идее, он так и делает, но не совсем правильно, он удаляет 3 элемент, а 7 у нас смещается на строку 6 и получается так что он удаляет совсем другой уже элемент. Я создал переменную step, думал буду фиксировать случай когда удаляется элемент и делать инкремент переменной step, для того чтобы она элемент брала правильно, но что-то не помогло, может кто нибудь подскажет как решить проблему? |
Массив элеметов то модифицируется, а значит и итерация будет указывать совсем не на то. Если так удалять, тогда с конца:
for(var i = elements.length; i; i--){ if(i % 4 == 3) elements[i].parentNode.removeChild(elements[i]); } |
laimas, да, то что нужно, спасибо.
|
laimas,
не подскажешь что в этом коде не правильно написано? https://jsfiddle.net/oq60k25k/1/ делаю проверку, имеется ли в элементе строка "question more" если да, заменить ее на "<a href=\"http://example.com\">It's</a> question more" тоесть, добавить ссылку и текст, создал отдельно переменную и редактировал ее, вроде норм, а цикле попробовал не работает. |
match вернет null, если сопоставлений не будет, то есть
if(elements[i].textContent.match( /question more/gi)) и хватит. Но в данном случае этой проверки вообще не нужно, и сразу elements[i].textContent.replace(/question more/g, "<a href=\"http://example.com\">It's</a> question more" ); Будет найдено, значит будет заменено, а нет, значит нет. Но, по идее ваш код должен порождать ошибку - elements[i] is undefined. Проверьте. |
Cannot read property 'textContent' of undefined
не может прочитать textContent, в чем проблема может быть? |
if(i % 4 == 3) elements[i].parentNode.removeChild(elements[i - 1]);
а elements[i].textContent.replace(/question more/g, "<a href=\"http://example.com\">It's</a> question more" ); а начало цикла равно elements.length. Что вы хотите сделать? Нет элемента с индексом elements.length, а значит будет ошибка. А вот элемент с индексом i - 1 будет, но если elements[i-1].textContent, то в чем требуется замена? Разберитесь какой индекс нужен и ошибок не будет. |
moslem, здравствуйте.
Цитата:
for(var i = elements.length; i; i--){ на первом же шаге пытаетесь обработать несуществующий элемент Далее, Вы удаляете, например, 19-й элемент, а потом пытаетесь что-то с ним сделать, это тоже неправильно. Вот так работает: <script> window.onload = function(){ var elements = document.getElementsByTagName('li'); for(var i = elements.length-1; i; i--){ if(i % 4 == 3) { elements[i].parentNode.removeChild(elements[i]); }else{ elements[i].innerHTML = elements[i].textContent.replace(/question more/g, "<a href=\"http://example.com\">It's</a> question more" ); } } } </script> <ul> <li>Element 1</li> <li>Element 2</li> <li>Element 3</li> <li>Element 4</li> <li>Element 5 question more</li> <li>Element 6</li> <li>Element 7</li> <li>at fugit neque magnam</li> <li>Element 9</li> <li>Element 10</li> <li>Element 11</li> <li>Element 12</li> <li>Element 13 question more</li> <li>Element 14</li> <li>Element 15</li> <li>Element 16</li> <li>Element 17</li> <li>Element 18</li> <li>Element 19 question more</li> <li>Element 20</li> <li>Element 21 question more</li> <li>Element 22</li> <li>Element 23</li> <li>Element 24</li> </ul> |
laimas, опередили меня :)
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 18:25. |