单击时需要将文本转换为大写和小写

时间:2015-03-11 13:37:38

标签: javascript jquery

我对JavaScript一无所知,我确信这是一件容易的事情,但是在过去的三个小时里,我一直在抨击我的大脑,试图找出它。

我想要的是有一些文字,比如Test.com,点击后会将所有字母转换为大写(TEST.COM)。如果用户再次单击,则文本将全部小写(text.com)。在第三次单击时,文本将返回到原始表单(Test.com)。

这可能吗?

7 个答案:

答案 0 :(得分:1)



var count = 1;
$('.text').click(function() {
  $(this).toggleClass('uppercase', count === 2);
  $(this).toggleClass('lowercase', count === 3);
  if (count === 3) {
    count = 0
  }
  count++;

});

.uppercase {
  text-transform: uppercase;
}
.lowercase {
  text-transform: lowercase;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="text">CamelCase 1 </span>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

定义2个CSS类。

.ucase {text-transform:uppercase;}
.lcase {text-transform:lowercase;}

结合使用jQuery .hasClass() .removeClass().addClass()来切换案例。

从文本中删除所有类以返回原始状态。

jQuery(document).ready(function() {

    jQuery(".textitem").click(function() {

       $t = jQuery(this);
        if($t.hasClass("ucase")) {
            $t.removeClass("ucase").addClass("lcase");
        } else if($t.hasClass("lcase")) {
            $t.removeClass("lcase");
        } else {
            $t.addClass("ucase");
        }
    });
});

小提琴:https://jsfiddle.net/ptj1ke8y/

答案 2 :(得分:0)

也许不是最优雅的解决方案,但您可以计算点击次数(模数3),并根据数量调整文本并循环显示3种情况。

var i = 0;
var cl = $('#text').text();
$('#text').click(function() {
  var str = $(this).text();
  if (i % 3 == 0) {
    $('#text').html(str.toUpperCase());
  }
  if (i % 3 == 1) {
    $('#text').html(str.toLowerCase());
  }
  if (i % 3 == 2) {
    $('#text').html(cl);
  }
  i++
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="text">Text</div>

答案 3 :(得分:0)

这是啰嗦的香草JS版本:

// grab the element containing the text
var div = document.querySelector('#test');

// grab the text
var text = div.innerHTML;

// save a copy of the text
var originalText = div.innerHTML;

// set `toggle` to O for original
// L = lowercase, U = uppercase
var toggle = 'O';

// add an click listener to the element containing the text
div.addEventListener('click', function () {

    // toggle between the states updating the text
    // of the element with each new click
    switch (toggle) {
            case 'O':
            div.innerHTML = text.toUpperCase();
            toggle = 'U';
            break;
        case 'U':
            div.innerHTML = text.toLowerCase();
            toggle = 'L';
            break;
        case 'L':
            div.innerHTML = originalText;
            toggle = 'O';
            break;
    }
}, false)

DEMO

如果你想让它适用于页面上的多个文本实例,那么这样的东西就可以了。理想情况下,您希望为此使用事件传播,但由于您的页面布局将来可能会发生变化,因此可能不值得冒险:

;(function () {

    // grab all the elements
    var divs = document.querySelectorAll('.test');

    // status is used to keep track of where in the cycle each text item is
    var status = {};

    for (var i = 0, l = divs.length; i < l; i++) {

        var div = divs[i];
        var key = div.innerHTML.toLowerCase();

        // update the status object with the initial text values
        status[key] = {
            status: 'O',
            originalText: div.innerHTML
        };

        // add the listener like last time
        // except this time we monitor the status object for
        // for each text instance
        div.addEventListener('click', function () {
            var text = this.innerHTML.toLowerCase();
            var key = status[text].originalText.toLowerCase();
            var toggle = status[key].status;
            var originalText = status[key].originalText;
            switch (toggle) {
                case 'O':
                    this.innerHTML = originalText.toUpperCase();
                    status[key].status = 'U';
                    break;
                case 'U':
                    this.innerHTML = originalText.toLowerCase();
                    status[key].status = 'L';
                    break;
                case 'L':
                    this.innerHTML = status[key].originalText;
                    status[key].status = 'O';
                    break;
            }
        }, false);
    }

}());

DEMO

答案 4 :(得分:0)

您可以使用.toUpperCase().toLowerCase() JavaScript方法更改任何文字的大小写。

由于您正在使用jQuery,因此您可以使用.text() jQuery方法来获取和设置任何DOM节点的文本内容。

你需要存储文本原始值的某个位置,以便在第三次单击后获得它,并且jQuery .data()方法对此有好处,因为这样你可以轻松地在一个表现出这种方式的页面。

你可以写这样的东西来制作所有带有类的元素&#34; test&#34;表现得像你所描述的那样:

  $('.test').click(function () {

    var $this = $(this),
        data = $this.data('clicker');

    if (!data || !data.text) {
      data = {
        text: [
          $this.text(),
          $this.text().toUpperCase(),
          $this.text().toLowerCase()
        ],
        step: 0
      };
    }
    data.step = (data.step + 1) % 3;
    $this.text(data.text[data.step]);
    $this.data('clicker', data);

  });

请参阅:DEMO,了解它如何同时使用3个元素。

答案 5 :(得分:0)

我认为这就是你想要的(按钮标题更改以告诉它将要做什么并更改文本):

        <form name="form1" method="post">
    <input name="instring" id="instring" type="text" value="this is the text string" size="30">
    <input type="button" id="button" name="Convert" value="Make Uppercase >>" onClick="makeUppercase();">
    <input name="outstring" type="text" id="outstring" value="" size="30">
    </form>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <script>


       function makeUppercase(){
           if( $('#button').val()=="Make Uppercase >>"){
                $('#button').attr("value","Make Lowercase >>");
                $('#outstring').attr('value', $('#instring').attr('value').toUpperCase());
           } else if($('#button').val()=="Make Lowercase >>") {
               $('#button').attr("value","Make Original >>");
               $('#outstring').attr('value', $('#instring').attr('value').toLowerCase());
           } else{
               $('#button').attr("value","Make Uppercase >>");
               $('#outstring').attr('value', $('#instring').attr('value'));
           }
       }
    </script>

答案 6 :(得分:0)

首先使用 click()将事件处理程序转移到&#34;点击&#34;然后使用 .hasClass() removeClass() addClass()来执行和使用css text-transform

HTML文件

<div id="trigger">click me to transform</div>

CSS文件

.uppercase { text-transform: uppercase; }
.lowercase { text-transform:lowercase; }

Javascript文件

$( document ).ready(function() {
   $( "#trigger" ).click(function() {
      if($( "#trigger" ).hasClass( "uppercase" )) {
           $(this).removeClass('uppercase').addClass('lowercase');
      }
      else {
          $(this).removeClass('lowercase').addClass('uppercase');
      }
   });
});

尝试播放Sandbox