0

Facebook ニュースフィードのコンテンツを置き換える Chrome 拡張機能の js 関数を作成しています。各投稿には、常に変化するクラスuiUnifiedStory uiStreamStory genericStreamStory aid_1719315288 uiListItem uiListLight uiListVerticalItemBorderがあります。aid

すべてのクラスを取得したい場合、単に使用することはできません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 のさまざまなライブラリ実装によって返されるものと同様)。

getElementsByClassName よりも広くサポートされていると思われるquerySelectorAllを使用することもできます。

編集

だからあなたは試しました:

  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>";

おっと、要素は NodeList です。その innerHTML プロパティに割り当てても、何も役に立たないか、エラーがスローされます。NodeList の現在のメンバーのプロパティを設定するつもりだった可能性があります。

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

追加するものがあれば、質問を編集できることに注意してください。

于 2012-08-10T03:09:29.900 に答える