这应该是最简单的解决方案,尽管我找不到任何相关内容。如果我在变量中包含元素,则使用jQuery:
var myContainer = $(body).find('.any-class');
现在,此变量是一个对象,其中包含其各自元素中的所有数据。它有自己的方法(例如myContainer.attr('anyAttr')
将不起作用,但myContainer.getAttribute('anyAttr')
现在将起作用)。
我的查询是当我得到myContainer.innerHTML
时,然后无法执行类似-.find()
之类的操作。我需要这样做,因为我需要在该元素的innerHTML
中找到类和ID(我实际上是在运行时创建的)。
此流程很重要,因为我在每个课程中都进行了循环。这是我的代码:
var myContainer = $(body).find('.any-class');
$.each(myContainer, function(key, value) {
if (value.getAttribute('is_required')) {
//value.innerHTML.find('.anyOtherClass'); find doesn't work. What should be done?
}
}
答案 0 :(得分:2)
由于innerHTML
的类型为字符串,因此无法在其上实现find()
。您可以简单地将value
用作jQuery对象,例如$(value).find()
。
请注意:您必须用引号将body
括起来。
var myContainer = $('body').find('.any-class');
$.each(myContainer, function(key, value) {
if (value.getAttribute('is_required')) {
console.log(typeof(value.innerHTML)); //string
console.log($(value).find('.anyOtherClass')[0]);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="any-class" is_required="yes">
<span>Container 1</span>
<span class="anyOtherClass">Container 2</span>
</div>
答案 1 :(得分:0)
如果.innerHTML
是DOM HTML元素,只需省略value
并用jQuery包装元素:
$(value).find('#anyId')....
请注意返回类型以及调用的函数和获得的属性的确切含义。在$(body)
上调用find
将返回一个jQuery列表,其中包含HTML元素,所有这些元素都与选择器表达式匹配。对于此类列表,jQuery确实提供了其他方法,例如http://api.jquery.com/attr/
。
在您的示例中,您突然切换到另一个变量optionContainers
,好吧,忽略了上一行,现在您正在each
上遍历一个类似数组的对象并处理其索引条目。
如果optionContainers
是jQuery列表,则确实会检索DOM HTML元素。
要使用jQuery方法,您必须使用jQuery包装这些元素。
永远记住,jQuery仅提供了额外的一层功能,因此您必须确保始终与该层交谈-就像您是通过律师(提供若干高级服务)与某人交谈一样。
答案 2 :(得分:0)
如果必须对所有属性为“ required”的元素执行该操作,则可以尝试
document.querySelectorAll('[attributeName="attributeValue"]');
如果选择所有必需项,则可以在下面使用
document.querySelectorAll("[required]");
您可以将代码更改为以下内容:
var selectedElements = value.querySelectorAll("required");
现在,您可以使用forEach或for循环遍历selectedElements
关于querySelectorAll的文档:https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelectorAll