簡體   English   中英

按標簽/類名長度選擇元素

[英]Select element by tag/classname length

我想在Tampermonkey中使用javascript / jquery選擇一個元素

每次頁面加載時,類名和元素的標記都在變化。 所以我必須使用某種形式的正則表達式,但無法弄清楚如何做到這一點。

這就是html的樣子:

<ivodo class="ivodo" ... </ivodo>
<ivodo class="ivodo" ... </ivodo>
<ivodo class="ivodo" ... </ivodo>
  • 標記始終與類名相同。
  • 它總是一個4/5字母隨機“代碼”

我猜它會是這樣的:$('[/ ^ [az] {4,5} /}')

誰能幫助我獲得正確的正則表達式?

您不能在選擇器中使用正則表達式。 您可以選擇一些容器並選擇其所有元素,然后根據其類名對其進行過濾。 不過,這可能不會超快。

我為你做了一個演示: https//codepen.io/anon/pen/RZXdrL?edit = 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');

最簡單的方法是選擇基於固定父級的動態元素,例如:

$('#parent > *').each(function() {
  // your logic here...
})

如果您在問題中說明了構造這些標記的規則是可靠的,那么您可以選擇所有元素,然后過濾掉那些不感興趣的元素,例如:

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();
});

你可以在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>

JS

// 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)
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM