Jquery每一个问题

发布于 2024-11-13 08:11:22 字数 2214 浏览 5 评论 0原文

所以服务器在隐藏输入中给了我一个 html 块。我需要获取这个块(其中包含多个 div)并移动这些 div,但需要一些逻辑。

我的方法是获取隐藏输入(html 块)的值并将其附加到新创建的隐藏 div 中:

  var history = $("input[name=history]").val();
  $("#global_wrapper").after("<div id='history_temp' style='display:none;'></div>");
  $("#history_temp").html(history);

这是 HTML 块的示例:

<div class="off 1"></div>
<div class="off 1"></div>
<div class="off 2"></div>
<div class="off 3"></div>

.off 将始终存在,并且数字类的范围将在从 1-9

基于数字类,我需要将每个 div 移动到现有的 html 块中,如下所示:

<div class="on 1"></div>
<div class="on 2"></div>
<div class="on 3"></div>

逻辑是每个 .off div 需要附加在具有相同数字类的 .on div 之后所以最终的结果看起来像这样:

<div class="on 1"></div>
<div class="off 1"></div>
<div class="off 1"></div>
<div class="on 2"></div>
<div class="off 2"></div>
<div class="on 3"></div>
<div class="off 3"></div>

我的尝试是为每个 .off div 运行每个函数,然后为每个数字 div 设置一个 if this.hasClass,但它复制了 .off div,并且有大约 12 个.off divs ,而应该只有 3 个。这是我的代码:

   $("#history_temp .off").each(function(){
    if ($(this).hasClass("1")) {
      $(this).clone().insertAfter(".on.1");
    }
    else if ($(this).hasClass("2")) {
      $(this).clone().insertAfter(".on.2");
    }
    else if ($(this).hasClass("3")) {
      $(this).clone().insertAfter(".on.3");
    }
    else if ($(this).hasClass("4")) {
      $(this).clone().insertAfter(".on.4");
    }
    else if ($(this).hasClass("5")) {
      $(this).clone().insertAfter(".on.5");
    }
    else if ($(this).hasClass("6")) {
      $(this).clone().insertAfter(".on.6");
    }
    else if ($(this).hasClass("7")) {
      $(this).clone().insertAfter(".on.7");
    }
    else if ($(this).hasClass("8")) {
      $(this).clone().insertAfter(".on.8");
    }
    else if ($(this).hasClass("9")) {
      $(this).clone().insertAfter(".on.9");
    }
    else {
      return false;
    } 
  }); 

有人能指出我正确的方向吗?我很好奇最有效的解决方案是什么。

谢谢, Brian

编辑:修复了我的示例代码中的一个错误(在每堂课之前缺少“.”)

So the server is giving me a block of html within a hidden input. I need to take this block (which contains multiple divs) and move those divs, but with some logic.

My approach is to take the value of the hidden input (html block) and append it into a newly created hidden div:

  var history = $("input[name=history]").val();
  $("#global_wrapper").after("<div id='history_temp' style='display:none;'></div>");
  $("#history_temp").html(history);

Here is an example of what the HTML block looks like:

<div class="off 1"></div>
<div class="off 1"></div>
<div class="off 2"></div>
<div class="off 3"></div>

The .off will always be there and the number class will range from 1-9

Based on the number class, I need to move each of these divs into an existing html block that looks like this:

<div class="on 1"></div>
<div class="on 2"></div>
<div class="on 3"></div>

The logic is that each .off div needs to be appended after the .on div with the same number class so that the end result would look like this:

<div class="on 1"></div>
<div class="off 1"></div>
<div class="off 1"></div>
<div class="on 2"></div>
<div class="off 2"></div>
<div class="on 3"></div>
<div class="off 3"></div>

My attempt was to run an each function for each .off div and then set up an if this.hasClass for each number div, but it was duplicating the .off divs and there were like 12 .off divs when there should have been just 3. Here is my code:

   $("#history_temp .off").each(function(){
    if ($(this).hasClass("1")) {
      $(this).clone().insertAfter(".on.1");
    }
    else if ($(this).hasClass("2")) {
      $(this).clone().insertAfter(".on.2");
    }
    else if ($(this).hasClass("3")) {
      $(this).clone().insertAfter(".on.3");
    }
    else if ($(this).hasClass("4")) {
      $(this).clone().insertAfter(".on.4");
    }
    else if ($(this).hasClass("5")) {
      $(this).clone().insertAfter(".on.5");
    }
    else if ($(this).hasClass("6")) {
      $(this).clone().insertAfter(".on.6");
    }
    else if ($(this).hasClass("7")) {
      $(this).clone().insertAfter(".on.7");
    }
    else if ($(this).hasClass("8")) {
      $(this).clone().insertAfter(".on.8");
    }
    else if ($(this).hasClass("9")) {
      $(this).clone().insertAfter(".on.9");
    }
    else {
      return false;
    } 
  }); 

Could anyone point me in the right direction? I'm curious as to what the most efficient solution would be.

Thanks,
Brian

EDIT: Fixed an error in my example code (was missing the "." before each on class)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦情居士 2024-11-20 08:11:22

FWIW,您的代码工作正常: http://jsfiddle.net/7XWuN/2/

我假设有您未发布的代码中是否发生了其他事情。

没有更多上下文,我会建议这样的内容:

$("#history_temp .off").each(function(){
    var n = this.className.match(/\d+/)[0];
    $(this).insertAfter('.on.' + n);
});

DEMO

这有效假设元素只有一个包含数字的类。也可能是使用数字作为类不能很好地与选择器配合,因为不允许类以数字开头。如果不起作用,请添加一些其他字符。

FWIW, your code works fine: http://jsfiddle.net/7XWuN/2/

I assume there is something else going on in the code you did not post.

Without any more context, I would suggest something like this:

$("#history_temp .off").each(function(){
    var n = this.className.match(/\d+/)[0];
    $(this).insertAfter('.on.' + n);
});

DEMO

This works under the assumption that the elements have only one class that contains a number. It could also be that using numbers as classes does not play well with the selector, as classes are not allowed to start with a number afaik. If it does not work, prepend some other character.

微暖i 2024-11-20 08:11:22

我更喜欢菲利克斯·克林斯的回答,但我也会发布我的答案,因为我完成了它。我的只是假设你有名为 1-9 的类,如果你碰巧超过 9,他的则更具包容性,并且更加优化。

现场演示

   $("#history_temp .off").each(function(){
       for(var i=1; i < 10; i++){
             if ($(this).hasClass(i)) {
               $(this).clone().insertAfter(".on." + i);
             }
       }
  }); 

I like Felix Klings answer better but Ill post mine as well just because I finished it. Mine just assumes you have classes named 1-9, his is more encompassing if you happen to go beyond 9, and is more optimized.

Live Demo

   $("#history_temp .off").each(function(){
       for(var i=1; i < 10; i++){
             if ($(this).hasClass(i)) {
               $(this).clone().insertAfter(".on." + i);
             }
       }
  }); 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文