1

これは奇妙なことです。何らかの理由で、要素の子を取得することが Camino ブラウザでは機能しません。他のすべてのブラウザーで動作します。誰でもこれを修正する方法を知っていますか? Googleは役に立ちません:(

var site_result_content = document.getElementById(content_id);
    site_child_nodes = site_result_content.children;
    alert('started');
    for(i=0;i<site_child_nodes.length;i++) {
        alert('cycle1');
        document.getElementById(site_child_nodes[i].id).className = 'tab_content';
        ShowHide(site_child_nodes[i].id,'hidden');
    }

この場合、開始されたアラートは呼び出されますが、cycle1 は呼び出されません。

4

2 に答える 2

2

childNodes代わりに使用してください。W3C DOM 仕様にあり、過去 10 年間にリリースされたすべての主要なブラウザーでサポートされているのchildrenに対し、IE の独自のプロパティとして開始されました。childNodes違いは、すべてのタイプ、特にテキスト ノードとコメント ノードを含むのchildrenに対し、要素のみを含むことです。childNodes

以下のコードを最適化しました。varなどのループで使用されるものを含め、すべての変数を で宣言する必要がありますi。また、document.getElementById(site_child_nodes[i].id)不要です。要素に ID がなく、それ以外の場合とまったく同じ場合は失敗しsite_child_nodes[i]ます。

var site_result_content = document.getElementById(content_id);
var site_child_nodes = site_result_content.childNodes;
alert('started');
for (var i = 0, len = site_child_nodes.length; i < len; ++i) {
    if (site_child_nodes[i].nodeType == 1) {
        alert('cycle1');
        site_child_nodes[i].className = 'tab_content';
        ShowHide(site_child_nodes[i].id, 'hidden');
    }
}
于 2010-06-22T09:11:40.203 に答える
1

まだ実装されていないのではないかと思います (Firefox 3.5 でのみ実装されました)。childNodes代わりに、(単なる要素ではなく) ノードのリストを返す を使用できます。次にnodeType、それが要素であることを確認します。

var site_result_content = document.getElementById(content_id);
site_child_nodes = site_result_content.childNodes;
alert('started');
for(i=0;i<site_child_nodes.length;i++) {
    // Check this is actually an element node
    if (site_child_nodes[i].nodeType != 1)
        continue;

    alert('cycle1');
    document.getElementById(site_child_nodes[i].id).className = 'tab_content';
    ShowHide(site_child_nodes[i].id,'hidden');
}
于 2010-06-22T09:12:15.630 に答える