每次加载页面时,元素的类名和标记都会发生变化。 所以我必须使用某种形式的正则表达式,但无法弄清楚如何去做。
这就是html的样子:
<ivodo class="ivodo" ... </ivodo>
<ivodo class="ivodo" ... </ivodo>
<ivodo class="ivodo" ... </ivodo>
我猜它会是这样的: $( '[/ ^ [A-Z] {4,5} /}')
有人可以帮助我获得正确的正则表达式吗?
答案 0 :(得分:2)
您不能在选择器中使用regexp。您可以选择一些容器并选择其所有元素,然后根据其类名对其进行过滤。但这可能不会超快。
我为你做了一个演示: https://codepen.io/anon/pen/RZXdrL?editors=1010
HTML:
<div class="container">
<abc class="abc">abc</abc>
<abdef class="abdef">abdef</abdef>
<hdusf class="hdusf">hdusf</hdusf>
<ueff class="ueff">ueff</ueff>
<asdas class="asdas">asdas</asdas>
<asfg class="asfg">asfg</asfg>
<aasdasdbc class="aasdasdbc">aasdasdbc</aasdasdbc>
</div>
js(使用jQuery):
const $elements = $('.container *').filter((index, element) => {
return (element.className.length === 5);
});
$elements.css('color', 'red');
答案 1 :(得分:2)
最简单的方法是根据固定父级选择那些动态元素,例如:
$('#parent > *').each(function() {
// your logic here...
})
答案 2 :(得分:1)
如果您在问题中说明了构建这些标签的规则是可靠的,那么您可以选择所有元素,然后过滤掉那些不感兴趣的元素,例如:
var $elements = $('*').filter(function() {
return this.className.length === 5 && this.className.toUpperCase() === this.tagName.toUpperCase();
});
<强> DEMO 强>
当然,您可能希望最初只选择某些容器中的元素。如果是,请将'*'
替换为更具体的选择器:
var $elements = $('someSelector *').filter(function() {
return this.className.length === 5 && this.className.toUpperCase() === this.tagName.toUpperCase();
});
答案 3 :(得分:1)
你可以在vanilla JS中做到这一点 DEMO
检查demo dev工具控制台
<body>
<things class="things">things</things>
<div class="stuff">this is not the DOM element you're looking for</div>
</body>
// Grab the body children
var bodyChildren = document.getElementsByTagName("body")[0].children;
// Convert children to an array and filter out everything but the targets
var targets = [].filter.call(bodyChildren, function(el) {
var tagName = el.tagName.toLowerCase();
var classlistVal = el.classList.value.toLowerCase();
if (tagName === classlistVal) { return el; }
});
targets.forEach(function(el) {
// Do stuff
console.log(el)
})