1

動作するこのコードスニペットがあります:

var oldInput = document.getElementsByName ("prio");
oldInput[0].setAttribute ("disabled", "disabled");

そして、これは関連するターゲットページのHTMLです(修正済み):

<div id="content">
    <p>(CONTENT)</p>
    <form>
      <p>Priority: <input name="prio" type="text" value="285"></p>
      <p>Success: <input name="succ" type="text" value="6"></p>
    </form>
</div>
<table border="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td class="user">
            &nbsp;
            <a href="#" class="nav" title="Logout John">Logout</a>

            &nbsp;(User: John)
            </td>
        </tr>
    </tbody>
</table>

jsfiddle.net/Kc3BB/3でそれを参照してください。

多くのユーザーに1つのアクセスポイントがあります。しかし、5人のユーザーが値を変更できるようにしたいと思いprioます。ユーザー名がフッターにあることがわかります。

上記のFirefox2.xのコードを使用し、jQueryを使用せずにJavaScriptでそれを行うことは可能ですか?

例:

if USER (from footer) == JOHN || LUKE || JEFF || MAX || ANDY
do nothing

else
disable PRIO BOX (from content)
4

3 に答える 3

1
var allowed_users = ['John', 'Luke', 'Jeff', 'Max', 'Andy'];
var user = /\(User: ([^)]*)\)/.exec(document.getElementById('footer').textContent​​​​​​​​)[1];
if(allowed_users.indexOf(user) === -1) // user not in allowed_users array, disable priority
{
    var oldInput = document.getElementsByName('prio')[0];
    oldInput.setAttribute('disabled', 'disabled');
}
于 2012-09-01T20:53:35.423 に答える
1

これを試して:

var tds = document.getElementsByTagName("TD",
    footerText = tds[tds - 1].textContent,
    user = footerText.match(/\(User: ([^\)]*\))/)[1].toUpperCase();

if (" JOHN LUKE JEFF MAX ANDY ".indexOf(" " + user + " ") !== -1) {
    // Do stuff
} else {
    // Do else stuff
    var oldInput = document.getElementsByName("prio");
    oldInput[0].setAttribute("disabled", "disabled");
}

:あなたの疑似コードは、あなたが言葉で言ったことの正反対を意味します。上記のコードを実際の要望に合わせて修正してください。

編集indexOf:Firefox 2が配列をサポートしているかどうか思い出せませんでした。します。したがって、代わりに次の行を使用できます。

if (["JOHN", "LUKE", "JEFF", "MAX", "ANDY"].indexOf(user) !== -1) {

編集2:あなたの編集を見て、それに応じて答えを変更しました。あなたの HTML スニペットが実際にページのソースを反映していることを願っています。さもないと、フッター要素に別の方法が必要になることがわかります。

于 2012-09-01T20:52:22.940 に答える
1

これはFirefox 2.0 で動作するはずです:

//--- Make sure this list of names is all uppercase.
var usersWhoCanSetPriority = ['JOHN', 'LUKE', 'JEFF', 'MAX', 'ANDY'];

var bDisablePrio    = true;
var tdNodes         = document.getElementsByTagName ("TD");
for (var J = tdNodes.length - 1;  J >= 0;  --J) {
    var tdNode      = tdNodes[J];
    if (tdNode.className == "user") {
        var userName        = tdNode.textContent.replace (
            /^(?:.|\n|\r)+\(User:\s+([^)]+)\)(?:.|\n|\r)+$/i, "$1"
        ).toUpperCase ();

        if (usersWhoCanSetPriority.indexOf (userName) > -1) {
            bDisablePrio    = false;
        }
    }
}

if (bDisablePrio) {
    var oldInput = document.getElementsByName ("prio");
    oldInput[0].setAttribute ("disabled", "disabled");
}

更新された Fiddleを参照してください。

于 2012-09-01T21:06:15.420 に答える