【问题标题】:Alert class based on it's length with Javascript/jQuery基于 Javascript/jQuery 长度的警报类
【发布时间】:2011-07-25 20:19:52
【问题描述】:

所以基本上我只是尝试选择“on”类,但基于类长度 2。

<div class="film cars-0317219 on"></div>
<div class="film wall-e-0910970 on"></div>
<div class="film off up-0945232"></div>
<div class="film on finding-nemo-0266543"></div>
<div class="film off cars-0317219"></div>

类似:

$('div.film').live('click', function(){
var classes=$(this).attr("class").split(" ");
var status=classes[classes.length=2];

alert(status);
});

应该提醒“开启”

知道如何根据字符串长度获取警报吗? (同样,如果我在代码中输入 3 而不是 2,它应该会提示“关闭”)

【问题讨论】:

  • 你想得到的不仅仅是on?如果碰巧也有一门课ok 你也想学吗? (基于获取所有长度==2)
  • 您绝对必须根据长度进行测试吗? $(this).hasClass("on") 是不可能的?
  • @rockerest 是的,它只是基于长度。
  • @Stephen length==2 警报由于某种原因未定义而不是打开。另外,如果上课没问题,我也想参加。
  • @Maverick - 我没有提供语法,只是要求澄清。我不希望 length==2 在没有上下文的情况下工作,我也没有提供。

标签: javascript jquery string class


【解决方案1】:
var status=classes[1]; // the second element of the array

更好的方式来做你想做的事:

var isOn=$('.film').hasClass('on');

alert(isOn?'on':'off');

请记住,$('.film') 在执行这些类型的操作时只会获得该类的第一个元素,除非这是在像 click 这样的处理程序中,在这种情况下您将使用 $(this)

【讨论】:

  • 更新了代码,但可以是任意两个字母,所以应该只根据长度
  • @Mavrick -- any two letter 是什么意思?
【解决方案2】:

你应该这样做:

alert(classes[1]);

javascript 中的数组是从零开始的,因此第二个元素的索引为 1(第三个元素的索引为 2)

编辑 - 现在我理解 OP 表示单词的长度(2 个字母):

var classes=$(this).attr("class").split(" ");
for (i = 0; i<classes.length; i++){
   if (classes[i].length ===2){
      alert(classes[i]);
   }
}

【讨论】:

  • on 或 ok 可以在类属性中的任何位置,所以我需要确保根据它的长度抓取它并提醒它
【解决方案3】:

如果你只想提醒一定长度的类,你可以这样进行

a=['film', 'cars-0317219', 'on'];//same as your var classes;
var status = a.filter(function(x){
 return x.length==this.size;
},{size:2});//contains ['on']

然而过滤器是为firefox实现的,我不知道对于其他浏览器。

【讨论】:

  • 我需要确保它是跨浏览器的
【解决方案4】:
function something(){
var classSplitOn =" ";
var desiredCount = 2;

var onClassSelector = ".on";

$('.film').each(function(index,elem){
  var classString = elem.className;
  if(classString && classString.split(classSplitOn).length == desiredCount){
    var alertVal = "off";
    if($(this).is(onClassSelector)){
      alertVal = "on";
    }
    alert(alertVal);
  }
});
}

【讨论】:

  • 您可能希望将我的函数传递到您的 .live() 声明中。你甚至可以开始传递数据,可能是我在顶部设置的三个变量。
  • 您是否希望它在每次点击时触发每个“有 X # 个类,并且打开”?还是只评估当前点击的元素?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 2020-08-05
  • 2018-10-11
  • 1970-01-01
相关资源
最近更新 更多