我正在尝试将数据表(datatables.net)库和css排队,所以这就是我所做的。
在我的子主题目录中的functions.php中。
function my_assets() {
wp_enqueue_script( 'jquery' );
wp_enqueue_script( 'datatables', '//cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js', array( 'jquery' ) );
wp_enqueue_style( 'datatables-style', '//cdn.datatables.net/1.10.12/css/jquery.dataTables.min.css' );
wp_enqueue_script( 'jq-assets', get_stylesheet_directory_uri() . '/js/jq-assets.js', array( 'jquery' ) );
}
add_action( 'wp_enqueue_scripts', 'my_assets' );
然后我意识到您必须将$
更改为jQuery
,因此我修改了jq-assets.js
文件,如下所示,这是包含数据表设置的文件。
// Initialization of dataTable and settings.
jQuery(document).ready(function ($) {
var dataTable = $('#contracts-datatable').DataTable({
bLengthChange: false,
"pageLength": 5,
"pagingType": "simple",
"order": [[ 7, "asc" ]],
"columnDefs": [
{
"targets": [ 5 ],
"visible": false,
"searchable": true
},
{
"targets": [ 6 ],
"visible": false,
"searchable": true
},
{
"targets": [ 7 ],
"visible": false,
"searchable": true
},
{
"targets": 0,
"orderable": false
},
{
"targets": 1,
"orderable": false
},
{
"targets": 2,
"orderable": false
},
{
"targets": 3,
"orderable": false
},
{
"targets": 4,
"orderable": false
}
],
// Dropdown filter function for dataTable from hidden column number 5 for filtering gifts.
initComplete: function () {
this.api().columns(5).every(function () {
var column = this;
var select = $('<select><option value="">Show all</option></select>')
.appendTo($("#contracts_control-panel").find("div").eq(1)) // append dropdown to div 2 in control panel
.on('change', function () {
var val = $.fn.dataTable.util.escapeRegex(
$(this).val());
column.search(val ? '^' + val + '$' : '', true, false)
.draw();
dataTable.page.len(5).draw(); //reset pagination after dropdown filter change.
});
column.data().unique().sort().each(function (d, j) {
select.append('<option value="' + d + '">' + d + '</option>')
});
});
}
});
// This function is for handling Child Rows. (Not in use).
$('#contracts-datatable').on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var row = dataTable.row(tr);
if (row.child.isShown()) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
} else {
// Open this row
row.child(format(tr.data('child-value'))).show();
tr.addClass('shown');
}
});
// Checkbox filter function below is for filtering hidden column 6 to show Free Handsets only.
$('#contracts_checkbox-filter').on('change', function() {
dataTable.draw();
dataTable.page.len(5).draw(); //reset pagination after checkbox filter change.
});
$.fn.dataTable.ext.search.push(
function( settings, data, dataIndex ) {
var target = '£0.00';
var position = data[6]; // use data for the position column
if($('#contracts_checkbox-filter').is(":checked")) {
if (target === position) {
return true;
}
return false;
}
return true;
}
);
//Alternative pagination load more.
$('#load-more').on( 'click', function () {
var i = dataTable.page.len() + 5; // Change value for pagination.
dataTable.page.len( i ).draw();
} );
//Alternative pagination show less - 5. (Not in use).
$('#button-less').on( 'click', function () {
var VisibleRows = dataTable.page.len();
var i = VisibleRows - 5; // Change value for pagination.
if (VisibleRows > 8) {
dataTable.page.len( i ).draw();
}
} );
// Opens all child rows
$("#contracts-datatable").DataTable().rows().every( function () {
var tr = $(this.node());
this.child(format(tr.data('child-value'))).show();
tr.addClass('shown');
});
// This function is for displaying data from HTML "data-child-value" tag in the Child Row.
function format(value) {
return '<div>' + value + '</div>';
}
});
但桌子仍然不起作用。我还检查了页面的源代码,看看enqueue是否在页面中包含了库以及我的设置和css。 (我发现它在场)
有谁知道我在这里做错了什么?如果您想要查看相关页面,您将需要一个用户代理切换器,并且能够将其更改为移动设备,因为我正在处理我的网站的移动版本,只有在检测到移动用户代理时才会加载
http://mobilereactor.co.uk/shop/mobile-phones/apple-iphone-5c-8gb-white-deals/
我做错了什么?感谢您的帮助!
答案 0 :(得分:1)
通过移动版本上的开发者工具检查控制台时,它说:
jq-assets.js?ver=4.5.2:3
Uncaught TypeError: $ is not a function(anonymous function)
可能的解决方案可能是替换:
jQuery(document).ready(function ($) {
使用:
jQuery(function ($) {
让我知道它是否有效。
修改强>
如果以上情况不起作用,请尝试此操作:
;(function($){
// your code
})(jQuery);