Это то, что сработало для меня и пошаговое открытие:
Вывод из консоли chrome
Сначала найдите родительский узел, содержащий неприятные пробелы.
$('.controls label[class="radio"]').parent();
[<div class="controls">
<label class="radio">…</label>
" "
" "
<label class="radio">…</label>
" "
" "
</div>]
Вы можете видеть, что это завернуто в массив из скобок [] jQuery всегда будет возвращать структуру, подобную массиву, даже если был найден один элемент.
Итак, чтобы добраться до HTMLElement, мы берем первый элемент массива с индексом 0.
$('.controls label[class="radio"]').parent()[0];
<div class="controls">
<label class="radio">…</label>
" "
" "
<label class="radio">…</label>
" "
" "
</div>
Обратите внимание, что скобок [] больше нет. Причина, по которой нам нужно это сделать, заключается в том, что jQuery будет игнорировать пробелы в dom, а HTMLElement — нет. Посмотрите, что происходит, когда мы обращаемся к свойству childNodes.
$('.controls label[class="radio"]').parent()[0].childNodes;
[<label class="radio">…</label>,
" ",
" ",
<label class="radio">…</label>,
" ",
" "]
У нас снова есть массив, да, вы замечаете скобки [], но видите ли вы другое отличие, посмотрите на все запятые, которых мы не смогли получить с помощью jQuery. Спасибо, HTMLElement, но теперь мы можем вернуться к jQuery, потому что я хочу использовать каждый вместо цикла for, вы согласны со мной? Итак, давайте обернем массив в jQuery и посмотрим, что произойдет:
$($('.controls label[class="radio"]').parent()[0].childNodes);
[<label class="radio">…</label>,
" ",
" ",
<label class="radio">…</label>,
" ",
" "]
Идеально! у нас есть точно такая же структура, но теперь внутри объекта jQuery, поэтому давайте вызовем каждый и выведем «это» на консоль, чтобы увидеть, что у нас есть.
$($('.controls label[class="radio"]').parent()[0].childNodes).each(function () {
console.log('|'+$(this).html()+'|');
});
|<input id="gender_f" name="gender" type="radio" value="f">Female|
|undefined|
|undefined|
|<input id="gender_m" name="gender" type="radio" value="m" checked="">Male|
|undefined|
|undefined|
Итак, мы используем jQuery для получения HTML-кода каждого элемента, стандартный материал `$(this).html, и, поскольку мы не видим пробелов, давайте заполним его вертикальной чертой |, хороший план, но что у нас здесь есть? Как видите, jQuery не умеет превращать пробелы в html, и теперь у нас есть undefined. Но это даже лучше, потому что там, где пробел может быть истинным undefined, он определенно ложный =)
Итак, давайте избавимся от лохов с помощью jQuery. Все, что нам нужно, это $(this).html() || $(this).remove();
давайте посмотрим:
$($('.controls label[class="radio"]').parent()[0].childNodes).each(function () {
$(this).html() || $(this).remove();
});
[<label class="radio">…</label>,
" ",
" ",
<label class="radio">…</label>,
" ",
" "]
О, дорогая.. но не бойся! Каждый по-прежнему возвращает предыдущую структуру, а не ту, которую мы изменили, давайте посмотрим, что теперь возвращает наш первоначальный запрос.
$('.controls label[class="radio"]').parent();
[<div class="controls">
<label class="radio">…</label>
<label class="radio">…</label>
</div>]
И Валла! Все сексуально и красиво =)
Итак, у вас есть, как удалить пробелы между элементами/тегами в стиле jQuery.
нРадость!
person
nickl-
schedule
18.09.2012