"но действительно, сколько приложений действительно имеет это много изменений?"
Честно, каждое приложение, я продолжил работать, прошло серьезный рабочий процесс, и/или логика изменяется от понятия пока много позже того, как развертывания. Это - причина номер один программирования "обслуживания"...
действительность - то, что Вы не можете думать обо всем впереди, следовательно причина Гибких процессов. Далее, BA всегда, кажется, пропускают что-то жизненное, пока это не найдено в тестировании.
Механизмы Правила вынуждают Вас к действительно отдельной бизнес-логике от представления и устройства хранения данных. Далее, при использовании правильного механизма, BA может добавить и удалить логику по мере необходимости. Как Chris Marasti-Georg сказал, это возлагает ответственность на BA. Но больше, чем который, это позволяет BA получать точно, что они просят.
Я думаю, как вы предложили ( подсчет длины) является наиболее эффективным способом, даже если он включает в себя немного больше кода:
var ins = $("a[@id='iframeUrl']");
if(ins.siblings('#myIframe:first').length == 0)
ins.parent().prepend('<iframe id="myIframe" src="'+ins.attr("href")+'"></iframe>');
Кроме того, селектор : first
будет здесь избыточным, так как всегда должен быть только один элемент с этим идентификатором, так:
var ins = $("a[@id='iframeUrl']");
if($('#myIframe').length == 0)
ins.parent().prepend('<iframe id="myIframe" src="'+ins.attr("href")+'"></iframe>');
также будет работать.
Изменить: как Фидо упоминает в комментариях, проверка длины также может быть сокращена, поэтому кратчайшей формой будет:
var ins = $("a[@id='iframeUrl']");
if(!$('#myIframe').length)
ins.parent().prepend('<iframe id="myIframe" src="'+ins.attr("href")+'"></iframe>');
Обратите внимание на восклицательный знак перед селектором в условии if !