使用 jQuery 仅寻址文本输入字段
Addressing only text input fields with jQuery
您好,我正在尝试仅处理文本字段,以便我可以仅为那些隐藏标签。
我仍然希望复选框和阅读按钮的标签可见。
隐藏代码有效,但它隐藏了所有标签。
脚本必须适用于所有情况,无论字段是什么或它们是如何命名的。
那么我如何才能让它只解决文本输入字段的标签:
$("label").each(function () {
我好像做不出来。
这是 html 的示例:
<p class="form-field pd-text">
<label class="field-label" for="229122">E-post</label>
<input type="text" name="229122" id="229122" value="" class="text" size="30" maxlength="255" />
</p>
<p class="form-field pd-checkbox">
<label class="field-label" for="229122">Example checkbox</label>
<span class="value"><span>
<input type="checkbox" name="229122" id="229122" value="25034" onchange="" />
<label class="inline" for="229122">false</label>
</span></span>
</p>
试试这个 $('[type=text]').prev().hide();
如果您在任何情况下将输入前的标签向后或向前移动两级。
你可以这样定位
var labelFor = $('[type=text]').attr('id');
$("label[for="+labelFor+"]").hide()
试试这个。
$("input[type='text']").prev('label').hide();
<p class="form-field pd-text">
<label class="field-label" for="229122">E-post</label>
<input type="text" name="229122" id="229122" value="" class="text" size="30" maxlength="255" />
</p>
<p class="form-field pd-checkbox">
<label class="field-label" for="229122">Example checkbox</label>
<span class="value"><span>
<input type="checkbox" name="229122" id="229122" value="25034" onchange="" />
<label class="inline" for="229122">false</label>
</span></span>
</p><script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
您可以使用.map
根据其for=
属性找到匹配的标签:
var labels = $("input[type='text']").map(function() {
return $("label[for=" + this.id + "]").toArray()
})
labels.hide();
示例 fiddle:https://jsfiddle.net/rdtt8toe/
注意 这要求 id=
是唯一的,它必须是唯一的(并且在 fiddle 中)但是 not 在你的代码中。因此,对于您的 html,所有标签都将被找到,因为复选框与文本框具有相同的 ID。
或者,您可以对 DOM 层次结构进行假设。例如:
$("input[type='text']").parent().find("label")
查找同一容器中的所有标签。这将找到前面和后面的两个元素,并且中间可以有其他元素(不像 .prev
!)
在你的情况下,你可能更愿意去最近的 .form-field
:
$("input[type='text']").closest(`.form-field`).find("label")
您可以为文本输入标签提供自定义 class
<p class="form-field pd-text">
<label class="field-label text-label" for="229122">E-post</label>
<input type="text" name="229122" id="229122" value="" class="text" size="30" maxlength="255" />
</p>
<p class="form-field pd-checkbox">
<label class="field-label" for="229122">Example checkbox</label>
<span class="value"><span>
<input type="checkbox" name="229122" id="229122" value="25034" onchange="" />
<label class="inline" for="229122">false</label>
</span></span>
</p>
然后只隐藏那些标签
$(".text-label").hide()
如果您想隐藏所有 表单字段 将自定义 class 分配给该字段
即:
<p class="form-field pd-text text-label">
<label class="field-label" for="229122">E-post</label>
<input type="text" name="229122" id="229122" value="" class="text" size="30" maxlength="255" />
</p>
您好,我正在尝试仅处理文本字段,以便我可以仅为那些隐藏标签。 我仍然希望复选框和阅读按钮的标签可见。 隐藏代码有效,但它隐藏了所有标签。
脚本必须适用于所有情况,无论字段是什么或它们是如何命名的。 那么我如何才能让它只解决文本输入字段的标签:
$("label").each(function () {
我好像做不出来。
这是 html 的示例:
<p class="form-field pd-text">
<label class="field-label" for="229122">E-post</label>
<input type="text" name="229122" id="229122" value="" class="text" size="30" maxlength="255" />
</p>
<p class="form-field pd-checkbox">
<label class="field-label" for="229122">Example checkbox</label>
<span class="value"><span>
<input type="checkbox" name="229122" id="229122" value="25034" onchange="" />
<label class="inline" for="229122">false</label>
</span></span>
</p>
试试这个 $('[type=text]').prev().hide();
如果您在任何情况下将输入前的标签向后或向前移动两级。 你可以这样定位
var labelFor = $('[type=text]').attr('id');
$("label[for="+labelFor+"]").hide()
试试这个。
$("input[type='text']").prev('label').hide();
<p class="form-field pd-text">
<label class="field-label" for="229122">E-post</label>
<input type="text" name="229122" id="229122" value="" class="text" size="30" maxlength="255" />
</p>
<p class="form-field pd-checkbox">
<label class="field-label" for="229122">Example checkbox</label>
<span class="value"><span>
<input type="checkbox" name="229122" id="229122" value="25034" onchange="" />
<label class="inline" for="229122">false</label>
</span></span>
</p><script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
您可以使用.map
根据其for=
属性找到匹配的标签:
var labels = $("input[type='text']").map(function() {
return $("label[for=" + this.id + "]").toArray()
})
labels.hide();
示例 fiddle:https://jsfiddle.net/rdtt8toe/
注意 这要求 id=
是唯一的,它必须是唯一的(并且在 fiddle 中)但是 not 在你的代码中。因此,对于您的 html,所有标签都将被找到,因为复选框与文本框具有相同的 ID。
或者,您可以对 DOM 层次结构进行假设。例如:
$("input[type='text']").parent().find("label")
查找同一容器中的所有标签。这将找到前面和后面的两个元素,并且中间可以有其他元素(不像 .prev
!)
在你的情况下,你可能更愿意去最近的 .form-field
:
$("input[type='text']").closest(`.form-field`).find("label")
您可以为文本输入标签提供自定义 class
<p class="form-field pd-text">
<label class="field-label text-label" for="229122">E-post</label>
<input type="text" name="229122" id="229122" value="" class="text" size="30" maxlength="255" />
</p>
<p class="form-field pd-checkbox">
<label class="field-label" for="229122">Example checkbox</label>
<span class="value"><span>
<input type="checkbox" name="229122" id="229122" value="25034" onchange="" />
<label class="inline" for="229122">false</label>
</span></span>
</p>
然后只隐藏那些标签
$(".text-label").hide()
如果您想隐藏所有 表单字段 将自定义 class 分配给该字段
即:
<p class="form-field pd-text text-label">
<label class="field-label" for="229122">E-post</label>
<input type="text" name="229122" id="229122" value="" class="text" size="30" maxlength="255" />
</p>