使用jquery向表中添加动态href

时间:2013-05-11 15:32:58

标签: javascript jquery html

我有一个带有模板的表来插入行,我想让这些行可以点击,以便我可以编辑它们。如何将href值附加到模板?

我的模板

        <tr class="template" style="display:none;">
            <td><span class="item_num"> Num </span></td>
            <td><span class="item_desc"> Description </span></td>
            <td><span class="item_price"> Price </span></td>
            <td><span class="item_ref">ref</span></td>
        </tr>

我的Javascript

    var newRow = $('#quote .template').clone().removeClass('template');
    var quoteItem = {
        number: 1,
        description: myDescriptionVariable,
        price: myPriceVariable,         
    };


    template(newRow, quoteItem)
        .insertAfter('#quote tr.template')
        .fadeIn()


   function template(row, quoteItem) {
       row.find('.item_num').text(quoteItem.number);
       row.find('.item_desc').text(quoteItem.description);
       row.find('.item_price').text(quoteItem.price);
       row.find('.item_ref').attr('href','hello');
       return row;
   }

2 个答案:

答案 0 :(得分:1)

您可以使用.data()

 row.find('.item_ref').data('ref','hello');

 <span class="item_ref" data-ref="" > Edit</span>

然后你可以像 -

一样使用它
     console.log($('.item-ref').data('ref'));

如果您只是想以某种方式存储数据,那么这可能会有用。如果您想要做更多事情,请告诉我。或者href包含哪种数据以及如何进一步使用它。


<强>更新

据我所知,到目前为止,您想要在插入后动态添加需要编辑的行。每行包含一些具有特定值的字段。并且您希望在item_ref课程中保存参考。

所以这就是你如何做到的 -

var num = 1; 
var myDescriptionVariable = 111;
var myPriceVariable = 999;

 // You may have some other element triggers cloning
$("button").click(function(){
    var newRow = $('#quote .template').clone().removeClass('template'); 

    var quoteItem = {
        number: num,
        description: 'Description ' + myDescriptionVariable, // added to distinguish items
        price: myPriceVariable + '  USD', // added to distinguish items
        linkToPopup: myDescriptionVariable + '_link_goes_here' // added to distinguish items
    };

    template(newRow, quoteItem)
            .insertAfter('#quote tr.template')
            .show();
});

function template(row, quoteItem) {
    row.find('.item_num').text(quoteItem.number);
    row.find('.item_desc').text(quoteItem.description);
    row.find('.item_price').text(quoteItem.price);
    // here 'href' will hold desired link_to_popup
    row.find('.item_ref').data('href',quoteItem.linkToPopup); 
    myDescriptionVariable+= 1; // added to distinguish items
    myPriceVariable+=2; // added to distinguish items
    num+=1; // added to distinguish items
    return row;
}

$("#quote").on("click", ".item_ref",function(){    
     // this will give to desired link_to_pop_val
    alert($(this).data('href')); 
});

我添加了button进行演示。这种方法绝对避免了为每行添加不必要的DOM元素,如隐藏的输入。使用.data(),每个字段都有相同的多种信息,例如 -

 $("span").data('key_1', value_1);
 $("span").data('key_2', value_2);
 $("span").data('key_2', value_3);

fiddle for demonstration

我认为这就是你想做的事情,应该达到目的。 :)

答案 1 :(得分:0)

实际上有几种方法可以做到这一点,其中一种方法是:

  1. 向模板中添加一些隐藏的输入
  2. 将点击事件绑定到将隐藏跨度并显示输入的行
  3. 你当然需要一个保存按钮,并对值进行一些操作,但我没有那样做。

    精简不完全正常的演示:http://plnkr.co/edit/GGM0d9wfNcoZBd5kKCwA

    <tr class="template" style="display:none;">
            <td><span class="item_num"> Num </span><input type="text" style="display:none" /></td>
            <td><span class="item_desc"> Description </span> <input type="text" style="display:none" /></td>
            <td><span class="item_price"> Price </span><input type="text" style='display:none' /></td>
            <td><span class="item_ref">ref</span><input type="text" style='display:none' /></td>
    </tr>
    

    jquery的:

    $(document).on('click', '#quote tr', function(e) {
       $('span', this).hide();
       $('input', this).show();
     });
    
     $('#add').on('click', function(e) {
        var newRow = $('#quote .template').clone().removeClass('template');
        var quoteItem = {
            number: 1,
            description: 'myDescriptionVariable',
            price: 100,         
        };
    
    
        template(newRow, quoteItem)
            .insertAfter('#quote tr.template')
            .fadeIn()
     });
    
    
    
       function template(row, quoteItem) {
           row.find('.item_num').text(quoteItem.number).next().val(quoteItem.number);
           row.find('.item_desc').text(quoteItem.description).next().val(quoteItem.description);
           row.find('.item_price').text(quoteItem.price).next().val(quoteItem.price);
           row.find('.item_ref').attr('href','hello').next().val('hello');
    
           return row;
       }