【问题标题】:Js click function that copies a divs class on click and stores it as a variableJs点击函数,在点击时复制一个div类并将其存储为变量
【发布时间】:2015-02-26 19:59:40
【问题描述】:

仍然需要帮助。

我正在寻找设置一个点击函数来嗅探被点击的 divs 类并将其存储为变量。比使用该变量来切换相对 div 的 slideDown。

JS

var $clickedOn = ...;

$( ".color" ).click(function() {
  $('.information').slideUp('slow');
  $( ".(clickedOn).tuckinfo" ).slideDown('slow');
}); 

HTML

这是被点击的内容。

<div class="color-list">
  <div class="container">
    <section class="color hospitality">

这是我想要在点击时下拉的内容。

<div class="greybg tuckinfo">
  <div class="container">
    <div class="hospitality-extended">

Codepen

http://i.imgur.com/nlA9O3M.gif http://imgur.com/nlA9O3M

【问题讨论】:

  • 那么...您现在的具体问题是什么?
  • 任何点击的 div?只有那些在某些元素里面?请澄清。此外,您在此处包含的点击功能似乎无关紧要。
  • 它叫this,你可能想要的是$(this)
  • 哦,我明白了。你对这一切都错了。使用 closest()find() 定位切换元素,而不是类。
  • 我不知道在 var 区域放什么。我只想要 div .color I.E
    中的另一个类,我只想要款待,而不是我想复制它并将其用作 $(('variable'+-expanded).tuckinfo) .slideDown('slow');所以 .hospitality-expanded .tuckinfo 将是下拉选择器。不知道这样的语法是什么。

标签: javascript jquery class events


【解决方案1】:

您可以使用class 属性。 this 包含被点击的元素

$( ".color" ).click(function() 
{
  var className = '.' + $(this).attr('class').replace('color','').split(/\s+/).join('.');
  $('.information').slideUp('slow');
  $( ".greybg.tuckinfo .container " + className + '-expanded').slideDown('slow');
}); 

【讨论】:

  • 虽然这回答了问题,但它非常脆弱。如果点击的元素有多个类,可能是由插件添加的呢?
  • 嗯。好点@isherwood我仍然需要 -expanded 添加到字符串中。这很接近了!
  • 我刚刚对其进行了修改以支持多个 CSS 类。谢谢伊舍伍德。
  • 问题不在于处理多个类——而是目标元素本身不会有相同的类。
  • 它仍然不会将 -expanded 添加到字符串的末尾。感谢您的帮助@imelgrat
【解决方案2】:

我查看了您的标记,我将尝试更全面的解决方案。

解决方案是为要触发向上/向下滑动的元素添加数据属性,然后为将受影响的元素添加相应的数据属性。

<div data-trigger-action="set1">Click Me</div>

<div data-trigger-key="set1">Slide me 'round</div>

然后在你的 JS 中:

$("[data-trigger-action]").on("click", function(e)
{
    e.preventDefault();

  var _key = $(this).attr("data-trigger-action");

  $triggerKeys
    .filter('[data-trigger-key!="' + _key + '"]').slideUp()
    .end().filter('[data-trigger-key="' + _key + '"]').slideDown();
});

有关工作示例,请参阅 this codepen

(注意:我可能错误地识别了您想要影响的项目,因此移动 [data-trigger-key] 属性应该可以解决该问题。)

编辑

这是更新后的 JS 代码,它将使用您的原始 HTML:

  // configure some action keys and selectors for elements to apply them to
  var keysToApply = {
    /* 'key/value to share': ['jquery-selector-to-action-el', 'jquery-selector-to-target-el'] */
    'hospitality': ['.color-list .color.hospitality', '.greybg.tuckinfo'],
    'taverns': ['.color-list .color.taverns', '#wrapper .information']
  };

  // loop through our config and apply the data attributes
  $.each(keysToApply, function(key, params)
  {
    $(params[0]).attr('data-trigger-action', key);
    $(params[1]).attr('data-trigger-key', key);
  })

  // cache our jQuery objects for our actions/keys
  var $triggerActions = $('[data-trigger-action]'),
      $triggerKeys = $('[data-trigger-key]');

  // handle the sliding up/down of items on click
  $("[data-trigger-action]").on("click", function(e)
  {
    e.preventDefault();

    var _key = $(this).attr("data-trigger-action");

    $triggerKeys
      .filter('[data-trigger-key!="' + _key + '"]').slideUp()
      .end().filter('[data-trigger-key="' + _key + '"]').slideDown();
  });

【讨论】:

  • 这个解决方案很棒!只是担心由于必须更改标记而实施到 wordpress 中。我可能应该指定。
  • @Aaron 啊,好 'ole WordPress。好吧,您有三个选择:(1)从主题编辑模板文件; (2) 有更多的 JS 代码行来分别针对每个触发器/受影响的元素; (3) 在附加点击事件之前,有一些初始化 JS 代码来应用数据属性。在这三个糟糕的选项中,我会选择#3。如果你也这样做,我会为你修改 codepen。
  • @Aaron 好的,codepen 已更新。如果您有任何问题,请告诉我。
  • 谢谢你,我从你的codepen中应用了js并制作了更多隐藏的div。当我点击小酒馆时,招待会保持开放,反之亦然。
  • 确保选择器(keysToApply 内的项目数组中的第二个值)正确识别您想要影响的元素。我只是根据我可以从标记中破译的内容来尝试一下。也许我交换了选择器——对吗? codepen.io/anon/pen/KweNwa
【解决方案3】:

你可以从onousedown获取目标:

window.onmousedown = function (event) {console.log(event.target);}

这应该记录你的元素

【讨论】:

  • 我如何剥离所有代码并接受热情款待。而不是将其添加到 .hospitality-expanded 之类的字符串中?
  • 啊,对不起,我第一次误解了你。以为您正在寻找一种方法来确定单击的元素。 document.getElementByClass("color hospitality").className = "hospitality-expanded"我没有使用 jQuery,所以这是原始 DOM 版本
猜你喜欢
  • 2012-06-17
  • 1970-01-01
  • 2010-12-01
  • 2022-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
  • 1970-01-01
相关资源
最近更新 更多