-2

絶えず変化する特定の文字セットの配列をループしたいと思います。そこから、大文字と小文字を切り替えたいので、この特定のコードを使用するように言われましたが、機能させることができません。コードは文字の配列をループする必要があります。文字は「入力」テキストボックスから取得されます。どうすればこれを修正できますか?

私は高校の授業でこれを行っているので、コーディングが完璧に近いとは言えません。


    <html> 
      <head> 
        <script type="text/javascript"> 
    function toggleCase() { 
        var i = document.getElementById("input").value.length;
        var word = document.getElementById("input").value;
        var chop =new array(i);
        for (a=i; a <= i; a++) {
            character[i] = word.slice(i-1,i)
            if (character[i] == character[i].toUpperCase;){
                character[i] = character[i].toLowerCase();
            }
            else {
                character[i] = character[i].toUpperCase();
            }
        }

        var final

        for (a=i; a <= i; a++) {
            final += character[i];
        }

        document.getElementById("output").value = final
    }
        </script> 
      </head> 
      <body> 
        <p>Enter letters for conversion:</p> 
        <form> 
          <input type="text" name="input" id="input" value="sample" maxlength="10"><br />
          <input type="text" name="output" id="output" value="" /> <br/>
          <input type="checkbox" name="toggle" value="ToggleCase" onClick="toggleCase(this.form)">Toggle Case<br/>
        </form> 
      </body> 
    </html> 
4

3 に答える 3

0

String の split メソッドを見てみたいと思うかもしれません。

var str = 'foo bar baz';

文字列を char 配列に変換する最も簡単な方法は、split メソッドに空の文字列を渡すことです。

var charArray = str.split(''):
// charArray === ['f','o','o' ... 'b','a','z']; 

また、参考までに、空白文字を split に渡すと、単語の配列が得られます。

var wordArray = str.split(' ');
// wordArray === ['foo', 'bar', 'baz'];

何を解決しなければならないかは少しわかりませんが、大文字を小文字に、またはその逆に変換する関数が必要なようです。

var userInput = document.getElementById('someTextBox');
// If you want to be fancy you could use JQuery
// var userInput = $(#someTextBox').value() 

function toggledCase( str ) {

    var characters = str.split('');
    // The split method still uses iteration so should be able to say it 
    // satisfies the argument of looping through each character.  
    // Split just provides a good abstraction to interface with.

    var toggledCharacters = [];
    var i;
    var ch;
    for( i in characters ) {
        // For in loops on strings will return the indexes instead 
        // of the characters
        ch = characters[i];

        if( ch.toUpperCase() === ch ){
            toggledCharacters.push( ch.toLowerCase() );
        } else {
            toggledCharacters.push( ch.toUpperCase() );
        }

        // If you like one-liners, 
        // the conditional if statement could be replace with a ternay statement.

        //  toggledCharacters.push( ( ch.toUpperCase() === ch ) ? 
        //  ch.toLowerCase() : ch.toUpperCase();
    }

    return toggledCharacters;
}

私の toggledCharacters メソッドは文字の配列のみを返すため、文字列として戻したい場合は for ループを作成できます。

var arr = toggledCharacters('Foo'); // str = 'fOO';
var str = '';  

var i, ch;
for ( i in arr ) {
    str += arr[i]; // += is just a short hand notation of saying 
                   //      str = str + arr[i];
}

あなたが怠け者でワンライナーが好きなら、関数型プログラミングを見てください。まだ高校生なので対象外です。

var arr = toggledCharacters('Foo'); // str = 'fOO';
var str = arr.reduce( function(str, ch) {
    return str + ch;
} );

とにかく、これは先生が概説したものよりもずっときれいに見えます.

function toggledCharacters(input) {
    input = input.split('');
    var output = [];

    var i, ch;
    for( i in input ) {
        output.push( ( input[i].toUpper() === input[i] ) ?
            input[i].toLower() : input[i].toUpper()
        );
    }

    return output.reduce( 
        function(str, ch) {
            return str + ch;
        }
    );
}

編集:

ああ、そのコードのどこにもチェックボックスのブール値が評価されていないことに気付きました。

var checkBox = document.getElementByName('toggle');
var inputTextBox = document.getElementById('input'); 
var outputTextBox = document.getElementById('output');

var result = inputTextBox.value;

if( checkBox.checked ) {
    result = toggleCase( result );
}

outputTextBox.value = result;

ああ、あなたは初心者なので、参考までに。ブラウザのコンソールを使用することを知っていることを確認してください。

Firefox を使用している場合は、firebug アプリを入手してください。

Chrome では、Ctrl-Shift-C を押します。

IEにも1つありますが、私はそれを使用したくありません。

コンソールを使用すると、html デモ ページを作成してコードが正常に機能していると仮定するよりも、JS を簡単に試すことができます。

さらに、これらの開発者ツールは、オブジェクトの基になるメソッドを表示できます。JS を学ぶための優れた迅速な方法になります。

于 2013-02-18T21:06:51.373 に答える
0

いくつかの API とハウツーを確認する必要があるかもしれませんが、コードは次のとおりです。

<html> 
<head> 
<script type="text/javascript"> 
function toggleCase() { 
  var text = document.getElementById("input").value;
  var character = new Array(text.length);

  for (i=0, a = text.length; i < a; i++) {
    character[i] = text[i];
    if (character[i] == character[i].toUpperCase){
      character[i] = character[i].toLowerCase();
    }
    else {
      character[i] = character[i].toUpperCase();
    }
  }

  document.getElementById("output").value = character.join('');
}
</script> 
</head> 
<body> 
<p>Enter letters for conversion:</p> 
<form> 
<input type="text" name="input" id="input" value="sample" maxlength="10"><br />
<input type="text" name="output" id="output" value="" /> <br/>
<input type="checkbox" name="toggle" value="ToggleCase" onClick="toggleCase()">Toggle Case<br/>
</form> 
</body> 
</html> 
于 2013-02-18T20:18:25.720 に答える
0
function toggleCase() { 
   var str = document.getElementById("input").value;
   for (var i=0; i<str.length; i++) {
     str[i] = (str[i]==str[i].toUpperCase() ? str[i].toLowerCase() : str[i].toUpperCase());
   }
   document.getElementById("output").value = str;
}

これは、仕事をする for ループです。and remember.toUpperCase.toLowerCaseare 関数

于 2013-02-18T20:22:21.377 に答える