根据元素类型或类名查找前一个DOM元素
Javascript - Finding previous DOM element by element type or class name
请注意:我正在寻找一个Javascript唯一的解决方案,jQuery不会有帮助,因为我不能使用它与给定的应用程序,我正在工作
我的DOM中有以下HTML:
<div class="mktoFormRow">
<div class="mktoFieldDescriptor mktoFormCol" style="margin-bottom: 10px;">
<div class="mktoOffset" style="width: 10px;"></div>
<div class="mktoFieldWrap">
<label for="Agency__c" class="mktoLabel mktoHasWidth" style="width: 100px;">
<div class="mktoAsterix">*</div>Agency:</label>
<div class="mktoGutter mktoHasWidth" style="width: 10px;"></div>
<div class="mktoLogicalField mktoCheckboxList mktoHasWidth" style="width: 150px;">
<input name="Agency__c" id="Agency__c" type="checkbox" value="yes" class="mktoField">
<label for="Agency__c"></label>
</div>
<div class="mktoClear"></div>
</div>
<div class="mktoClear"></div>
</div>
<div class="mktoClear"></div>
我想使用Javascript来瞄准第一个标签(在这个例子中,有for="Agency__c"
的那个),每当div
与mktoCheckboxList
类存在时。
这是到目前为止,我已经能够在Javascript中找出,但我在一个损失。我的思维过程是通过label
的元素类型或mktoLabel
的类型来定位mktoCheckboxList
之前的前一个元素。
var checkboxes = document.getElementsByClassName('mktoCheckboxList');
var count = checkboxes.length;
for (i = 0; i < count; i++) {
console.log(checkboxes[i].previousElementSibling);
}
此解决方案需要与实际的名称值无关,因为我希望每当出现不知道其属性的复选框时都能正常工作,因此使用类/元素。
这是我的jsfiddle: http://jsfiddle.net/darcyvoutt/1y9s00k7/
document.querySelector
现在被所有主流浏览器支持(参见我可以使用)。
document.querySelector(".mktoCheckboxList label")
将选择在.mktoFieldDescriptor
中找到的第一个标签。
你也可以在元素上这样做:
parent.querySelector("label");
如果你需要检查一个div是否包含一个特定的元素,然后再检索另一个,你可以这样做:
querySelectorAll(".mktoFieldDescriptor").filter(function(container){
// Remove the containers that do not contain .mktoCheckboxList.
return !!container.querySelector(".mktoCheckboxList");
}).map(function(container){
// Get the first label.
return container.querySelector("label")
}).forEach(function(label){
// Do your label stuff.
});
一个可能的解决方案是:
var checkboxes = document.getElementsByClassName('mktoCheckboxList');
var count = checkboxes.length;
for (i = 0; i < count; i++) {
console.log(checkboxes[i].parentNode.querySelector('label'));
}
请注意,此解决方案只适用于当您在与标签相同的div中有单个.mktoCheckboxList
元素时。
小提琴
这里有一个可能的方法:
用它的标签绑定每个输入。然后查找需要处理的输入,并通过
获取标签元素。// Scan the page for labels:
var labels = document.getElementsByTagName('LABEL');
// Find the corresponding input:
for (var i = 0; i < labels.length; i++) {
if (labels[i].htmlFor != '') {
// Assign a reference to the label from the actual form element:
var elem = document.getElementById(labels[i].htmlFor);
if (elem)
elem.label = labels[i];
}
}
完成后,您可以轻松地执行:
// Lookup all inputs:
var inputs = document.getElementsByTagName("input");
for (var i = 0, max = inputs.length; i < max; i++){
// Act only on checkboxes:
if (inputs[i].type === 'checkbox')
console.log(inputs[i]); // Look! It's the label!
}
使用此方法,您只使用标签名称input
和类型checkbox
来定位您的标签。
您可以使用document.evaluate
并通过XPath寻址您想要的标签。测试:
//div[contains(@class, 'mktoCheckboxList')]/preceding::label[1]
- 使用clickToggle并在单击另一个元素时关闭元素
- 表追加而不附加最后一个元素
- 滚动到容器中的下一个元素-几乎到了
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- 按我自己的类克隆另一个元素的内容和顺序
- Javascript获取上一个元素的内容
- 如何通过HTML+CSS中的另一个元素Selector更改元素的属性值
- 在数组中的一个元素上设置多个值
- 指令的模板必须只有一个根元素:With restrict E&替换true
- HTML JavaScript,我如何能够通过给每个元素一个不同的Id来使用JavaScript使这个函数工作
- 如何创建一个独立的 DOM 元素?一个不从父母那里继承 css 等
- 如何给图像元素一个“;选择“;使用Raphael.js查看
- 如何显示隐藏的
- 元素一个接一个或全部同时
- 使用"span"创建一个自定义的基于web的文本编辑器;元素——一个坏主意
- 引导旋转木马传递元素一个接一个
- 给所有元素一个匹配数组内容的ID
- 我如何得到Json数组元素一个接一个的jquery上不同的id'
- 一次淡入附加元素一个
- 如何使用AngularJS检索外部网站的内容(一个元素一个元素)