0

我正在为替换 Facebook 新闻源中的内容的 Chrome 扩展程序制作 js 函数。每个帖子都有总是变化的uiUnifiedStory uiStreamStory genericStreamStory aid_1719315288 uiListItem uiListLight uiListVerticalItemBorderaid

如果我想获得所有课程,我不能只使用aid_*.

我怎样才能获得与援助可以是任何东西li的类相匹配的所有元素。uiUnifiedStory uiStreamStory genericStreamStory aid_* uiListItem uiListLight uiListVerticalItemBorder

4

1 回答 1

1

有许多库允许通过通配符进行选择,但是您可以通过以下方式手动进行:

var elements = document.getElementsByClassName( /* class names other than aid_* ones */
var re = new RegExp('(^|\\s)aid_(\\s|$)'); 
var result = [];

for (var i=0, iLen=elements.length; i<iLen; i++) {
  if (re.test(elements[i].className)) {
    result.push(elements[i]);
  }
}

请注意,getElementsByClassName返回一个活动的NodeList,但结果将是一个本机数组(getElementsByClassName 的各种库实现返回的任何内容)。

您还可以使用querySelectorAll,我认为它比 getElementsByClassName 得到更广泛的支持。

编辑

所以你尝试了:

  var elements = document.getElementsByClassName('uiUnifiedStory uiStreamStory' +
                 ' genericStreamStory aid_173333252718885 aid_183319479511' +
                 ' uiListItem uiListLight uiListVerticalItemBorder');

  var re = new RegExp('(^|\\s)aid_(\\s|$)');
  var result = [];

  for (var i=0, iLen=elements.length; i<iLen; i++) {

    if (re.test(elements[i].className)) {
      result.push(elements[i]);
      elements.innerHTML = "<h6>benrox!</h6>";

糟糕,elements 是一个 NodeList,分配给它的 innerHTML 属性要么没有用,要么引发错误。您可能打算设置 NodeList 的当前成员的属性:

      elements[i].innerHTML = "<h6>benrox!</h6>";
      --------^^^

请注意,如果您有要添加的内容,您可以编辑您的问题。

于 2012-08-10T03:09:29.900 回答