这对我有用,也是一步一步的发现:
输出来自 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,因为我想使用 each 而不是 for 循环,你同意我的观点吗?
因此,让我们将数组包装在 jQuery 中,看看会发生什么:
$($('.controls label[class="radio"]').parent()[0].childNodes);
[<label class="radio">…</label>,
" ",
" ",
<label class="radio">…</label>,
" ",
" "]
完美!我们仍然有完全相同的结构,但现在在一个 jQuery 对象中,所以让我们调用每个并将“this”打印到控制台以查看我们有什么。
$($('.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 肯定是虚假的 =)
所以让我们摆脱 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>]
还有沃拉!性感又漂亮 =)
那么你有它,如何删除元素/标签之间的空白 ala jQuery 样式。
开心!