0

そこで、一連の画像を反復処理し、指定された座標で各画像の div.tagged を表示する erb ブロックを作成しました。この特定のケースでは、ブロックは 2 つの画像を反復処理します。以下に作成したものは完全に機能しますが、コンテンツは動的に追加されるため、jQuery 関数で span.i_contact、.i_tagmap、span.o_contact、および o_tagmap の値をループする方法を見つける必要があります。何か案は?前もって感謝します。

ERB

<% if @new_manual.present? %>
<% n = 0 %>
<% @new_manual.steps.each do |step| %>
    <% n += 1 %>
    <% i_connection = Contact.find(step.input_contact) %>
        <span class="i_contact<%= n %>" data-pos-x="<%= i_connection.pos_x %>" data-pos-y="<%= i_connection.pos_y %>"  data-pos-width="<%= i_connection.pos_width %>" data-pos-height="<%= i_connection.pos_height %>" ="spanid<%= n %>"></span>

    <% o_connection = Contact.find(step.output_contact) %>
        <span class="o_contact<%= n %>" data-pos-x="<%= o_connection.pos_x %>" data-pos-y="<%= o_connection.pos_y %>"  data-pos-width="<%= o_connection.pos_width %>" data-pos-height="<%= o_connection.pos_height %>" id="spanid<%= n %>"> </span>

<br>
<div class="image_panel<%= n %>" style="float:left; width:600px; position:relative;">
    <%= image_tag(i_connection.image.image.url(:large)) %>
<div class="i_tagmap<%= n %>"></div>
</div>

<div class="image_panel<%= n %>" style="float:left; width:600px; position:relative;">
    <%= image_tag(o_connection.image.image.url(:large)) %>
<div class="o_tagmap<%= n %>"></div>
</div>      

<% end %>   
<% end %>

jQuery

$(document).ready(function(){

 $('span.i_contact1').each(function() {                //needs to be .i_contact(x)
    var pos_width = $(this).data('pos-width');
    var pos_height = $(this).data('pos-height');
    var xpos = $(this).data('pos-x');
    var ypos = ($(this).data('pos-y')) + -125;
    console.log(ypos)
    var taggedNode = $('<div class="tagged" />')
    taggedNode.css({
        "border":"5px solid red",
        "width":pos_width,
        "height":pos_height,
        "left":xpos,
        "top":ypos
    });
    $('.i_tagmap1').append(taggedNode)        //needs to be .i_tagmap(x)
});

$("span.o_contact1").each(function() {            //needs to be .o_contact(x)
    var pos_width = $(this).data('pos-width');
    var pos_height = $(this).data('pos-height');
    var xpos = $(this).data('pos-x');
    var ypos = $(this).data('pos-y');

    var taggedNode = $('<div class="tagged" />')
    taggedNode.css({
        "border":"5px solid red",
        "width":pos_width,
        "height":pos_height,
        "left":xpos,
        "top":ypos  
    });
    $('.o_tagmap1').append(taggedNode)        //needs to be .o_tagmap(x)
});

編集

生成された HTML へのリンク

4

1 に答える 1

1

最初に、マークアップへの小さな変更が必要になる可能性があります (クラスi_contacto_contactと を追加data-index)

<span class="i_contact i_contact<%= n %>" data-pos-x="<%= i_connection.pos_x %>" data-pos-y="<%= i_connection.pos_y %>"  data-pos-width="<%= i_connection.pos_width %>" data-pos-height="<%= i_connection.pos_height %>" ="spanid<%= n %>" data-index="<%= n %>"></span>

<span class="o_contact o_contact<%= n %>" data-pos-x="<%= o_connection.pos_x %>" data-pos-y="<%= o_connection.pos_y %>"  data-pos-width="<%= o_connection.pos_width %>" data-pos-height="<%= o_connection.pos_height %>" id="spanid<%= n %>" data-index="<%= n %>"> </span>

それで

$(document).ready(function(){

    $('span.i_contact').each(function() {                //needs to be .i_contact(x)
        var pos_width = $(this).data('pos-width');
        var pos_height = $(this).data('pos-height');
        var xpos = $(this).data('pos-x');
        var ypos = ($(this).data('pos-y')) + -125;
        console.log(ypos)
        var taggedNode = $('<div class="tagged" />')
        taggedNode.css({
            "border":"5px solid red",
            "width":pos_width,
            "height":pos_height,
            "left":xpos,
            "top":ypos
        });

        var n = $(this).data('index')
        $('.i_tagmap' + n).append(taggedNode)        //needs to be .i_tagmap(x)
    });

    $("span.o_contact").each(function() {            //needs to be .o_contact(x)
        var pos_width = $(this).data('pos-width');
        var pos_height = $(this).data('pos-height');
        var xpos = $(this).data('pos-x');
        var ypos = $(this).data('pos-y');

        var taggedNode = $('<div class="tagged" />')
        taggedNode.css({
            "border":"5px solid red",
            "width":pos_width,
            "height":pos_height,
            "left":xpos,
            "top":ypos  
        });
        var n = $(this).data('index')
        $('.o_tagmap' + n).append(taggedNode)        //needs to be .o_tagmap(x)
    });
});
于 2013-07-23T02:49:26.670 に答える