Вы не хотите делать вызов find
после выполнения вызова children
. find
выглядит в элементах набора, но элементы input
никогда не могут быть в других элементах input
, а элементы select
никогда не могут быть в других элементах select
.
Отдельно, вы никогда не захотите использовать $()
в наборе jQuery ($($self)
).
Сначала я бы нашел все input
s и selects
, затем .not()
, если elem
является правдивым, чтобы удалить те, с которыми я не хочу совпадать.
function resetdetaildata(parentselector, elem) {
var $self = $(parentselector);
// Find all inputs and selects
var $inputs = $self.find('input');
var $selects = $self.find('select');
if (elem)
{
// We're filtering, so do that
$inputs = $inputs.not(elem);
$selects = $selets.not(elem);
}
$inputs.val("");
$selects.each(function () {
$(this).find('option:gt(0)').remove();
$(this).find('option:first').prop('selected', true);
});
}
Примечание: Вы можете сделать код, удаляющий все, кроме первый option
в select
sa немного проще, если использовать DOM напрямую:
function resetdetaildata(parentselector, elem) {
var $self = $(parentselector);
// Find all inputs and selects
var $inputs = $self.find('input');
var $selects = $self.find('select');
if (elem)
{
// We're filtering, so do that
$inputs = $inputs.not(elem);
$selects = $selets.not(elem);
}
$inputs.val("");
$selects.each(function () {
this.options.length = 1; // <== Removes all options except the first
this.selectedIndex = 0; // <== Selects the first option
});
}