3

"FieldName=" を含むすべてのテーブル セルを検索しようとしています。最初に getElementsByTagName を使用してこれを行い、次に indexOf を使用してテストをループすると、正常に動作し、191 個のセルを取得してから、ターゲット セルを完全にテストすることに成功しました。

次に、 $("td:contains('FieldName')"); で試しました。そしてそれは失敗します。等号にバックスラッシュを付けたり、バックスラッシュを 2 つ付けたり、削除したりしてみましたが、それでもヒットはゼロです。UC または LC に変換する必要なく indexOf で動作するため、このケースは正しいです。

ヘルプ!:-) まじめな話、標準の JS は動作するので何とかやってのけることができますが、そのようなクールなツールを使用できず、その理由がわからないのは本当にもどかしいことです。これが私のコードです - 両方のアプローチの結果を見るためにコメントしてコメントを外してください:

//var cells = document.getElementsByTagName("td");
var cells = $("td:contains('FieldName\=')");
alert(cells.length);
for (var i = 0; i < cells.length; i++) {
    if (cells[i].innerHTML.indexOf('FieldName=') > -1) {
        // do stuff here...
    }
}

誰かが私の間違いを見つけたとき、私はばかげていると思うでしょうが、それは私たちが学ぶ方法です. :-)

サンプルセル:

        <TD valign="top" class="ms-formbody" width="400px">
    <!-- FieldName="Title"
         FieldInternalName="Title"
         FieldType="SPFieldText"
      -->
        <span dir="none">
    <input name="ctl00$m$g_c2ed1f85_8eef_4759_817c_cd68435bd0a3$ctl00$ctl04$ctl00$ctl00$ctl00$ctl04$ctl00$ctl00$TextField" type="text" maxlength="255" id="ctl00_m_g_c2ed1f85_8eef_4759_817c_cd68435bd0a3_ctl00_ctl04_ctl00_ctl00_ctl00_ctl04_ctl00_ctl00_TextField" title="Title" class="ms-long" /><br>
</span>


    </TD>
4

2 に答える 2

3

ここで見られる問題は、次の行の違いです。

cells[i].innerHTML

そしてその:contains仕組み。テキスト:contains文字列を検索します。HTML コメントは無視されます。

innerHTML が機能する理由は、すべてを文字列として返し:contains、この要素と子要素の innerText 内にある文字列のみを返すためです。

次のように、プレーンな JS と組み合わせて jquery を使用して、目標を達成することができます。

$("td").each(function () {
    // var this is the current element's DOM object
    if (this.innerHTML.indexOf("FieldName") != -1) {
        // do stuff
    }
});
于 2012-08-01T13:04:58.753 に答える
0

あなたのコードは動作するはずです...含むには大文字と小文字が区別されることを覚えておいてください。それがあなたの問題でしょうか?

javascript が実行された時点で html は存在しますか?

于 2012-08-01T12:53:10.373 に答える