Domanda

How can I set the data-attribute with jQuery on an element that is not in the DOM yet?

Code:

   var panelHeading = $('<div/>', {class:'panel-heading', href:'#'+username+'PanelContent'});
   panelHeading.data('toggle', 'collapse').data('target',"#"+username+"PanelContent");

The data attributes don't appear when I append it to the document. The other attributes do appear.

È stato utile?

Soluzione

You can add data attributes when creating the element

var panelHeading = $('<div />', {
    'class'       : 'panel-heading', 
    href          : '#'+username+'PanelContent',
    'data-toggle' : 'collapse',
    'data-target' : '#'+username+'PanelContent'
});

using data() stores the data internally in jQuery, it does not create HTML attributes, so it works rather poorly with attributes for things like Bootstrap

Altri suggerimenti

jQuery's data() method doesn't set HTML5 data- attributes, it actually stores high-level data in the DOM element. You can store complex objects and functions using data() that you can't using attributes.

If you really must set an attribute, use attr('data-toggle','collapse') and the like. But as mentioned in an earlier comment, why not just set it in the initial declaration?

You can use:

var panelHeading = $('<div data-target="' + '#'
    + username + 'PanelContent' + '"/>');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top