2013-09-17 4 views
3

У меня есть следующая структура HTML документа:Выбрать все HTML выбрать элементы внутри фрейма

<frameset cols="25%,50%,25%"> 
    <frame name="name1" src="frame_a.htm"> 
    <frame name="name2" src="frame_b.htm"> 
</frameset> 

Оба frame_a.htm и frame_b.h возвращают форму с отборными элементами, входящими:

<form> 
    <select id="select1"> 
     <option value="1">1</option> 
     <option value="2">2</option> 
     <option value="3">3</option> 
    </select> 
    <select id="select4"> 
     <option value="1">1</option> 
     <option value="2">2</option> 
     <option value="3">3</option> 
    </select> 
</form> 

и

<form> 
    <select id="select2"> 
     <option value="1">1</option> 
     <option value="2">2</option> 
    </select> 
</form> 

Как выбрать все элементы селектора только для первого кадра?

Я попытался следующие варианты:

jQuery("frame[name='name1'] select").each(function(index) { 
    var elementID = jQuery(this).attr('id'); 
    alert(elementID); 
}); 
jQuery("frame[name='name1']").find('select').each(function(index) { 
    var elementID = jQuery(this).attr('id'); 
    alert(elementID); 
}); 
jQuery("frame[name='name1']").contents().find('select').each(function(index) { 
    var elementID = jQuery(this).attr('id'); 
    alert(elementID); 
}); 

Но это не помогло. Кроме того, я пытаюсь предупредить кадр, он работал:

jQuery("frame[name='name1']").each(function(index) { 
     alert("test1"); 
    }); 

Но при попытке предупредить все отдельные элементы, он не делает:

jQuery("select").each(function(index) { 
     alert("test2"); 
    }); 

Примечание: Я загрузки кода с помощью:

<script> 
    jQuery(document).ready(function() { 
     //here I put JavaScript code 
    }); 
</script> 

ответ

0

Что я нашел, пожалуйста, поправьте меня, если я ошибаюсь.

Во-первых, я помещаю код в элемент основного документа html. Он выглядел так:

<head> 
    <script type="text/javascript" src="lib/jquery-1.10.2.min.js"></script> 
    <script> 
     // put JavaScript code here 
    </script> 
</head> 
<frameset cols="25%,50%"> 
    <frame name="name1" src="frame_a.htm"> 
    <frame name="name2" src="frame_b.htm"> 
</frameset> 

И это не помогло. Даже следующее не помогло (кадры во втором случае загружены):

jQuery("frame[name='name1']").load(function() { ...} 

Второй. Мне пришлось переместить весь код JavaScript в дочерние html-файлы. В моем случае это frame_a.htm и frame_b.htm. И каждый файл имеет следующий код JavaScript в настоящее время:

jQuery(document).ready(function() { 
    for(var i = 0; i < parent.frames.length; ++i) 
    { 
     if(parent.frames[i].name == "name2" && self === parent.frames[i]) 
     { 
      jQuery("select").each(function(index) { 
       var elementID = jQuery(this).attr('id'); 
       alert(elementID); 
      }); 
     } 
    } 
}); 

Вероятно, существует более эффективное решение, но это один разрешил мою проблему. Рамки - злые, не используйте их :)

0

Попробуйте

jQuery("frame[name='name1']").contents().find('select').each(function(index) { 
    var elementID = jQuery(this).attr('id'); 
    alert(elementID); 
}); 
+0

Ваши варианты не работают для меня :(Не могу понять почему. Следующее предупреждает: jQuery ("frame [name = 'name1']"). Each (function (index) { alert ("test1");}); Но когда я пытаюсь предупредить за каждый элемент select, это не работает: jQuery ("select") .each (функция (индекс) { alert («test2»); }); Нужна помощь :) – Alexandr

+0

@ Александр, потому что элемент 'select' не находится в текущем корневом документе, есть в другом документе –

+0

Я вижу. Затем, как узнать, почему ваш оригинальный вариант не помогает? Какие-нибудь советы? – Alexandr

0

Вы должны попробовать

$("frame[name='name1']").contents().find("select") 
0

попробовать, как этот

#("frame[name='name1']).contents().find("select").each(function(index) { 
var elementID = jQuery(this).attr('id'); 
alert(elementID); 
}); 
#("frame[name='name1']").find('select').contents().find("select").each(function(index) { 
var elementID = jQuery(this).attr('id'); 
alert(elementID); 
}); 
Смежные вопросы