1

レンダリングされた HTML を変更するアクセス権がないため、CRM (Zoho) が作成したいくつかのフィールドの表示を変更するための Greasemonkey スクリプトを作成しています。

これは簡単なはずですが、Zoho は、適切な HTML を作成するのは非常に面倒だと判断したようで、HTML には次のようなものが含まれています。

<input type="text" maxlength="50" style="width: 100%;" class="textField" id="property(Phone)" name="property(Phone)"/>

ID には、ID 属性では無効なスペースと括弧が含まれており、document.getElementById() を使用してそれらを選択したり、jQuery を使用してそれらを選択したりできません。

その要素を取得する方法について誰かアイデアがありますか? もちろん、親要素のインデックスを介して取得することも、DOM をトラバースすることもできますが、どちらも、フィールドの順序が変更されると、Greasemonkey スクリプトが正しく動作しなくなることを意味します。これは、間違った要素をターゲットにするためです。 .

4

5 に答える 5

1

これはどのブラウザ用ですか?あなたがGreaseMonkeyに言及しているので、Firefoxだと思います。しかしdocument.getElementById("property(Phone)")、Firefox 3.5 では問題なく動作するようです。

于 2010-01-07T18:23:20.750 に答える
1

次のようにブラケットをエスケープできます。

$("#property\\(Phone\\)")
于 2010-01-07T18:24:25.853 に答える
1

バックスラッシュを使用して、スペースと括弧をエスケープできます。

$('#property\\(Phone\\)').val('jQuery selected property(Phone)!');
$('#ab\\ cd\\ ef').val('jQuery selected ab cd ef!');
于 2010-01-07T18:24:57.617 に答える
0

いつでも document.getElementsByTagName('input') を実行してから、結果を参照し、その属性 (タイプと名前、クラスなど) と一致させることができます。あまり効率的ではありませんが、どの注文でも機能することがわかっている唯一の方法です(IDが無効であるため)...

var inputs = document.getElementsByTagName('input');
if (inputs)
    for (var i = 0; i < inputs.length; i++)
        if (inputs[i].type == 'text' && inputs[i].name == 'SearchValue')
            return inputs[i];

JQuery(または他の優れたフレームワーク)には、このスニペットと同等のものがあると確信しています...

于 2010-01-07T18:19:48.687 に答える
0

JQuery はおそらく #id 構文を使用してそれを見つけることができませんが、tagName[id=value] 構文を使用しておそらく見つけることができます...試してみてください。jQuery ドキュメントを参照してください。

于 2010-01-07T18:21:40.010 に答える