选择框架内的所有 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.htm 都返回一个包含选定 elments 的表单:

<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>

尝试

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

你应该试试

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

尝试这样做

#("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);
});

我发现了什么,如果我错了,请纠正我。

首先,我将代码放入主 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.htmframe_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 );
            });
        }
    }
});

可能还有另一个更有效的解决方案,但这个解决方案解决了我的问题。框架 - 是邪恶的,尽量不要使用它们:)