使用jQuery按ID名称查找类

Rya*_*len 7 jquery clone class classname find

<div id="calcwrapper">
    <img class="sugarcube" src="images/sugarcube.png" width="13" height="17">
    <div id="drinks">
        <a id="drink1" href=""><img src="images/drinkicon1.png" width="84" height="81"></a><div class="drink1"></div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,只有一个饮料按钮,但我的代码包含八个按钮.每个都有一个相应的同名的div类.我正在尝试做的是"动态"抓取锚标签的id(id ="drink1"),将克隆糖块图像(img class ="sugarcube"...)附加到等效的类名div(类= "drink1").我希望这听起来并不令人困惑.也许下面不成功的尝试会让你知道我想要实现的目标.

尝试1

$(".sugarcube").clone().attr("class", "sugarcube" + i).appendTo($(this).parent((".drink1").attr("class")));
Run Code Online (Sandbox Code Playgroud)

尝试2(尝试通过控制台找到工作解决方案)

var className = $(this).attr("id");
console.log(className);

console.log($(this).parent().children("div").hasClass(className));
Run Code Online (Sandbox Code Playgroud)

我搜索了Google和StackOverflow,但没有找到任何代码示例.谢谢您的帮助.

这是完整的HTML代码上下文......

<!DOCTYPE html>
<html>
<head>
    <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.min.js"></script>
    <script src="js/jquery-animate-css-rotate-scale.js"></script>
    <script>
        $(function() {
            $(".sugarcube").hide();
            var max = 8;
            function animateSugarcubes() {
                for (var i=1; i<=max; i++) {
                    $(".sugarcube" + i).css("position", "absolute");
                    $(".sugarcube" + i).css("top", Math.ceil(Math.random() * (50 - 20) + 20));
                    $(".sugarcube" + i).css("left", Math.ceil(Math.random() * (85 - 40) + 40));
                    $(".sugarcube" + i).hide();
                }
            }

            $("#drinks a").click(function() {

                for (var i=1; i<=max; i++) {
                    // Attempt 1
                    $(".sugarcube").clone().attr("class", "sugarcube" + i).appendTo($(this).parent().children($(this).attr("id")));

                    // Attempt 2 test code.
                    var className = $(this).attr("id");
                    console.log($(this).parent().children("div").hasClass(className));
                }

                return false;
            });
            animateSugarcubes();
        }); 
    </script>
</head> 
<body> 

<div id="calcwrapper">
    <img class="sugarcube" src="images/sugarcube.png" width="13" height="17">
    <div id="drinks">
        <a id="drink1" href=""><img src="images/drinkicon1.png" width="84" height="81"></a><div class="drink1"></div>
        <a id="drink2" href=""><img src="images/drinkicon2.png" width="84" height="81"></a><div class="drink2"></div>
        <a id="drink3" href=""><img src="images/drinkicon3.png" width="84" height="81"></a><div class="drink3"></div>
        <a id="drink4" href=""><img src="images/drinkicon4.png" width="80" height="81"></a><div class="drink4"></div>
        <a id="drink5" href=""><img src="images/drinkicon5.png" width="84" height="81"></a><div class="drink5"></div>
        <a id="drink6" href=""><img src="images/drinkicon6.png" width="84" height="81"></a><div class="drink6"></div>
        <a id="drink7" href=""><img src="images/drinkicon7.png" width="84" height="81"></a><div class="drink7"></div>
        <a id="drink8" href=""><img src="images/drinkicon8.png" width="84" height="81"></a><div class="drink8"></div>
    </div>
</div>

</body> 
</html> 
Run Code Online (Sandbox Code Playgroud)

请注意,锚标记使用id(id ="drink1")而div使用类(class ="drink1")

bey*_*ode 4

如果我从字面上回答你的问题,那么我最终可能会得到这样的结果:

var drinksLinks = $("#drinks a"); // get list of all a tags inside drinks
drinksLinks.each(function() {     // perform function for each element
   var element = $(this);         // get jquery object for the current element
   var id = element.attr("id");   // get the id
   var div = element.find("." + id); // find the element with class matching the id

   $(".sugarcube").clone().appendTo(div);
});
Run Code Online (Sandbox Code Playgroud)

但是,如果您试图查找一个特定元素,则应尽量避免按类引用事物。我的建议是实际上假设像 Drinks1 这样的 div 总是紧挨着 a 标签,那么你可以这样做:

var sugarcube = $(".sugarcube");
var drinksLinks = $("#drinks a"); // get list of all a tags inside drinks

drinksLinks.each(function() {
   var div = $(this).next();  // get the element next to the a tag
   sugarcube.clone().appendTo(div);
});
Run Code Online (Sandbox Code Playgroud)

有几点需要记住:

  • 尝试使选择器尽可能窄,因为搜索 DOM 的成本可能很高。
  • 尽可能尝试通过 id 搜索 DOM,因为这本身比旧版浏览器中通过类搜索要快
  • 如果您对同一元素进行多次引用,请将其存储在变量中,就像我对 Sugarcube 元素所做的那样。这样您就可以减少获得结果所需的页面搜索量

希望这可以帮助!