http://bootstrap-table.wenzhixin.net.cn/documentation/ BST-ify a table ONCE with exactly ONE of the following: HTML: table attr: data-toggle="table" OR run: $(... table).bootstrapTable() OR run: $(... table).bootstrapTable({...}) //{} may be empty To set options after that you must use refreshOptions function. JAVASCRIPT SETTING KEYS are camelBack from Javascript, HTML SETTING ATTR NAMES are data-hyphen-ated (all start with 'data-'). Dynamically: Load data $(... table).bootstrapTable('load', [rows]) Update options $(... table).bootstrapTable('refreshOptions', {...}) This UPDATES the existing options, does not replace them. EXCEPT that ONLY HMTL th col. definitions can be overridden but not removed. Option value of undefined has no effect. Same with column options, they update existing options for that col. Definitely do not need to run updateView for displayed data and table length to update when you run 'load' or refreshOptions of 'columns'. Sorting Must set in each sortable column's definition: sortable:true Column titles When setting from JavaScript, title value does not default to field value. This is as stated in docs. Must set title explicitly. BUT data-title get default value when you set data-field (HTML). Quirks when set things from HTML (a.o.t. JS): Column definitions made here may be overridden but not removed. If you set just data-field, you get a default data-title, contray to docs. Awesomely, if 'escape' set, formatter input is escaped but formatter output is not. Events Can't set up event-handling with HTML. Docs document only using option event names in original table creation, but this usage works perfectly fine with refreshOptions too. Barely documented col option "cell" does really set a CSS class for the th and td values.