The selectize object is added to the original select / input element instance. Make sure to add a [0] to specify the selectize object:
$(this)[0].selectize.destroy();
See Selectize API Docs for specific example.
Additionally, I have seen a lot of unanswered questions about cloning selectize.js elements. Here is approximately how I went about the process:
// Trigger when add row button clicked
$('.row-add').click(function() {
// Find last row in table (or div) to clone from
var lastRow = $("myTable").find('tr').last();
// Determine if selectize.js is in use on any element and disable
// before cloning.
var selectizeElements = {};
lastRow.find('select').each(function() {
if ($(this)[0].selectize) {
// Store last row's current options and value(s) to
// restore after destroying for clone purposes.
selectizeElements[$(this).attr('id')] = {
inputOptions: $(this)[0].selectize.options,
inputValue: $(this)[0].selectize.getValue()
}
// Destroy the selectize.js element
$(this)[0].selectize.destroy();
}
});
// Clone last row
newRow = lastRow.clone().insertAfter(lastRow);
// Clear any data that was already entered in the cloned row
newRow.find( 'input,select,textarea' ).each(function() {
$(this).val( '' );
$(this).attr( 'checked', false );
});
// Re-enable any selectize.js fields if needed, adding back
// any options and selected values to the original row.
if (!$.isEmptyObject(selectizeElements) {
$.each(selectizeElements, function(key, value) {
lastRow.find('select#'+key).selectize();
newRow.find('select#'+key).selectize();
})
// Copy back options and values to cloned row
$.each(selectizeElements, function(key, value) {
lastRow.find('select#'+key)[0].selectize.addOption(value.inputOptions);
lastRow.find('select#'+key)[0].selectize.setValue(value.inputValue);
});
}
// I usually update the id and name attribute index number here so
// that each form element has a unique id and name.
});
You can find some working example code in this Repo