2017-01-26 4 views
1

Что я пытаюсь сделать. У меня есть форма, которая открывается на новой вкладке. Я хочу, чтобы представить эту форму с некоторыми дополнительными вещами: а) Удалить «целевой = _blank» б) сохранить эту форму нетронутой для будущихнайти в jQuery объект верхнего уровня

Здесь приведен пример форма:

<div id="cloneForm"> 
    <form id="searchForm" method="post" target="_blank" action="#"> 
    </form> 
</div> 

Так что я придумал : Чтобы сохранить форму нетронутыми я клонировать форму с JQuery в переменную:

var searchForm = $('#searchForm').clone(); 
var cloneForm = $('#cloneForm').clone(); // This is just for workaround 

Но селектор, который работал на $ («#») cloneForm find('[target="_blank"]') больше не работает. (Интересно, почему?). Этот селектор работает только с «cloneForm».

Так что я могу сделать две вещи:

  • я могу получить доступ к целевой атрибут таким образом: searchForm[0].target набор к чему-то
  • cloneForm.find('[target="_blank"]').removeAttr('target')

Но ни один из этих двух мне нравится. Мне не нравится добавлять дополнительный div cloneForm. Мне не нравится доступ к цели через массив.

Любые предложения в лучшем виде?

ответ

0

Форма является объектом верхнего уровня в наборе и единственным объектом верхнего уровня в наборе. Просто используйте attr на нем:

cloneForm.attr("target", "new value"); 
// or 
cloneForm.removeAttr("target"); 

Если бы это было не единственным объектом в наборе, вы будете использовать filter, чтобы получить новый набор только с этим объектом в нем:

cloneForm.filter('[target="_blank"]').attr("target", "new value"); 
// or 
cloneForm.filter('[target="_blank"]').removeAttr("target"); 

. .. но в вашем случае нет необходимости, так как вы знаете, что есть только один элемент верхнего уровня.

Смежные вопросы