1

私は過去数日間これを試みてきましたが、私のJavascriptは恐ろしいです。非常に。

基本的に、Imが達成しようとしているのは、tdの値を取得し、10桁の文字列をチェックすることです。(実際には、アメリカ形式の電話番号です。すでに正規表現を考えています。)その文字列を別の文字列(電話番号ではないもの)に置き換える必要があります。

テーブル構造は次のようになります。

    <tr id="76">
        <td class="stxt">
            <div class="dtxt" id="t1344992123" title="14 Aug 12, 08:55 PM">17 mins ago</div>
            <span>
                <a title="Delete">[×]</a>&nbsp;
                <a title="Ban User">[o]</a>&nbsp;
            </span>
            <b class="nme pn_std">Person</b>
            : This is a line a user has said previously
        </td>
    </tr>

すべて同じフォーマットの行がいくつかあります。「:これはユーザーが以前に言った行です」と書かれているところは、数字をチェックする必要があるものです。

私が投稿したテーブル形式は、私が使用しなければならないすべてです。追加できず、タグ/属性を削除できません。

誰かがImが検索しているものの各インスタンスをチェックして置換するためのコードを思い付くことができれば、正規表現と置換文字列を自分で挿入できます。

そして、誰かが興味を持っているなら、これはcboxチャットの単語フィルター用です。これは、誰かがチャットをロードしたときに実行されるものです。

私を助けることができる人は誰でも素晴らしいでしょう。私が言ったように、私はJavascriptが苦手です。PHPは私が使用する言語です。

4

2 に答える 2

2

IE8より前のものをサポートしていない場合は、新しいquerySelectorAllを使用できます。しかし、コメントに続いて、古いアプローチを支持してコメントするつもりです。

//var tableCells = document.querySelectorAll('#tableId td'),
var tableCells = document.getElementsById('tableId').getElementsByTagName('td'),
i = tableCells.length;

while(i--){
    var thisCell = tableCells[i];
    thisCell.innerHTML = thisCell.innerHTML.replace(yourRegEx,yourReplacementStuff);
}

誰かが正規表現とHTMLについてパイプする前に、彼はここで電話番号を探しているだけであり、正規表現でHTMLを解析するのではないことを覚えておいてください。テーブル全体のinnerHTMLプロパティでregExを使用することもできますが、実際には、ループして小さな部分を切り取る方が速いのではないかと思います。

于 2012-08-15T02:33:45.943 に答える
0

テキストを置き換えたい要素を一意に識別できない場合は、すべてのテキストノードを繰り返し処理し、正規表現に一致するテキストに置き換える必要があります(これは表示されていません)。

function processTable(id) {
  var table = document.getElementById(id);
  var cells;
  var re = /\d{10}/; // just an example
  var text = 'foo';  // just an example

  if (table) {

    // Could iterate over table.rows then row.cells,
    // but gEBTN seems suitable
    cells = table.getElementsByTagName('td');

    for (var i=0, iLen=cells.length; i < iLen; i++) {
      replaceText(cells[i], re, text);
    }
  }
}

// Recursively replace text in text nodes of elements
function replaceText(el, re, text) {

  var node, nodes = el.childNodes;

  for (var i=0, iLen=nodes.length; i < iLen; i++) {
    node = nodes[i];

    // Replace content of text nodes
    // Ignore script elements
    if (node.nodeType == 3 && node.tagName.toLowerCase() != 'script') {
      node.data = node.data.replace(re, text);

    // Recurse over elements to get child text nodes
    } else if (node.childNodes) {
      replaceText(node, re, text);
    }
  }
}

それをテストするためのいくつかのHTML:

<table id="t0">
  <tr>
    <td>1234567890
    <td><span>1234567890</span>
  <tr>
    <td>foo 1234567890 bar
    <td><span><b>1234567890</b></span>
  <tr>
    <td><a href="http://www.google.com">1234567890</a>
    <td><span>1234567890</span>
<table>

<button onclick="processTable('t0')">Do replacements</button>

上記は、JavaScriptをサポートするすべてのブラウザーで機能するはずです。たとえば、IE 5以降(IEがgetElementByIdのサポートを開始したとき、確かにIE 6はサポートしていました)。

于 2012-08-15T03:20:25.620 に答える