web-dev-qa-db-fra.com

Obtenir un élément dans Frame en utilisant jQuery

J'essaie d'accéder à un élément qui se trouve à l'intérieur d'un cadre, mais je n'ai pas encore eu de chance de le faire. J'ai lu beaucoup d'exemples ici sur stackoverflow et dans la documentation de jQuery, mais tous les exemples que j'ai vus faisaient référence à des iFrames qui se comportent différemment des cadres traditionnels. La structure de ma page est la suivante, avec le contenu réel supprimé:

<html>
<head></head>
<frameset>
<frame name="Menu"><html><body>
    <!--Menu contents-->
</body></html></frame>

<frameset>
<frame name="SettingsTree"><html><body>
    <!--Setting options-->
</body></html></frame>
<frame name="SettingsGrid" id="SettingsGrid"><html><body>
    <div id="findthis"></div>
    <!--Setting grid values-->
</body></html></frame>
</frameset>

</frameset>
</html>

La façon d’obtenir le contenu de "findthis" dans un iFrame serait

$('#SettingsGrid').contents().find('#findthis')

cependant, cela ne retourne rien. L'objet $ ('# SettingsGrid') existe avec une longueur de 1 et tout le code HTML que j'attendrais. Cependant, lorsque j'appelle .contents () sur cet objet, il ne renvoie rien. Je ne sais pas si c'est parce qu'il n'a pas été chargé correctement dans le DOM ou s'il y a un autre problème.

18
Jeff Fol

Essaye ça:

$('#findthis', window.parent.frames[0].document)

Ou du plus haut niveau:

$('#findthis', top.window.frames[0].document)

Voir la question/réponse précédente: Exécuter JQuery dans le contexte d’un autre cadre

39
dgilland

Cela a fonctionné pour moi, si le cadre a un nom et un identifiant:

$('#frame_id',top.frames["frame_name"].document) ...
1
James Drinkard

Ma meilleure solution de travail sur le mode entreprise IE8/IE11 avec jQuery 1.11.1 est la suivante:

$('#findthis', $('#SettingsGrid')[0].contentWindow.document)
1
DoronG

Pour moi, le bon moyen de le faire était de trouver un cadre par classe et d’utiliser la méthode prop () de jquery et la fenêtre de contenu. Malheureusement, dans ce cadre, il doit être déclaré par une fonction qui effectue une tâche pour vous, par exemple. méthode findAndsubmitForms ().

fenêtre parent:

$('.frameClass or #id or so').prop('contentWindow').findAndSubmitForms();

fenêtre enfant (cadre):

function findAndSubmitForms(){
    $('form').submit();
    }

S'il n'est pas possible de déclarer une telle méthode à l'intérieur du cadre, vous pouvez bien entendu le définir comme suit:

$('.frameClass').prop('contentWindow').findAndSubmitForms=function(){...};

et que d'appeler notre fonction désirée: d

passez une bonne journée et vous souhaite un bon moment en regardant l'écran: D

0
Karol

Avez-vous essayé $('#findthis', $('#SettingsGrid'))?

Le deuxième argument de la requête externe est le contexte dans lequel effectuer la recherche mentionnée par le premier argument. Quand aucun second argument n'est donné, c'est par défaut la racine.

0
Fortunato