3

何らかの理由で、jQuery html()関数を動作させることができません。私は次のことを試しました:

  1. 特定の div を検索します。

    var div = $("#divId");

    結果:効く

  2. jQuery で使用できることをテストします。

    alert($(div).attr("id"));

    結果: 動作します。IDが提示されます

  3. div 内の html を取得します。

    alert($(div).html());

    結果: 機能しません。空のアラート

  4. innerHTML を使用して div 内の html を取得します。

    alert(document.getElementById($(div).attr("id")).innerHTML);

    結果: 動作します。div コンテンツはアラートに表示されます

実際のコード:

$(document).ready(function(){

var autocomp = namespace('mx.autocomp');

autocomp.overlay = (function() {

    var formId;
    var $searchValueComp;
    var $searchResultComp;

    function init(inFormId, inSearchValue){
        formId = inFormId;
        $searchValueComp = $("#"+inFormId).find("[id$="+inSearchValue+"]");
        $searchResultComp = $("#"+inFormId).find("[id$=searchResult]");
    }

    function handleOverlay(){
        var fn = window[formId + "OverlayWid"];
        var result = document.getElementById($searchResultComp.attr("id")).innerHTML;

        if($searchValueComp.val().length==0){
            fn.hide();
        }

        // Test - This does not work as I get an empty alert
        alert($searchResultComp.html());

        // Edit1: New test, this works.
        // When I use this javascript, I start with initializing the script from the page
        // using the "init(inFormId, inSearchValue)" function. The handleOverlay() function
        // is called through the "oncomplete='mx.autocomp.overlay.handleOverlay();'" of a
        // p:remoteCommand that executes a search in the db and then update the div called
        // "searchResultComp".
        //
        // Only reason I can think of why the code below works is that the jQuery object $test 
        // is created after the div called "searchValueComp" has been updated by p:remoteCommand.
        // However, I don't understand why the jquery object "searchValueComp" wouldn't have
        // access to the same content as it should look for it first when the html() function 
        // is called. Or is the content of the div searchValueComp set immediately when the 
        // object is created in the "init" function?
        var $test = $("#"+formId).find("[id$=searchResult]");
        alert($test.html());

        // I need to check if the div: "searchResultComp" has any content. 
        // As I don't get $searchResultComp.html() to work, I'm forced to 
        // use the "getElementById" way instead. 
        if(result.length==0){
            fn.hide();
        }else{
            fn.show();
        }

    }

    function print(text){
        $("#textCheck").prepend(text + '\n');
    }

    return {
        handleOverlay: handleOverlay,
        init: init
    };

})();

});

私は何を間違っていますか?

4

4 に答える 4

0

Peter Campbellは、これに対するフォローアップの質問で答えをくれました。jqueryオブジェクトの「コンテンツ」は作成直後に設定されますか?

明らかに、期待される結果を得るには、変数searchResultCompを再初期化する必要があります。

于 2013-01-24T10:31:32.340 に答える
0

これを試して

HTML

<div id="mydiv">
    <select class="myclass">...</select>
    <select class="myotherclass">...</select>
</div>

JS コード

var $div = $('div');
alert($div.html());

ライブデモ

于 2013-01-23T19:47:56.247 に答える
-1

$jQuery オブジェクトを変数に割り当てる場合、jQuery オブジェクトとして目立つように変数を a で始めるのが一般的です。これはコードに影響を与えませんが、開発者の観点からは簡単になります。

var $div = $('div');

html を取得するには、次の手順を実行します。

$div.html();
于 2013-01-23T19:47:20.703 に答える
-1

次のように、div を引用する必要があります。

$("div").html();

また、ページに複数の div 要素がある場合は、いずれかを指定する必要があります。これを行うには、クラスを追加するか、.eq() を使用して結果をフィルタリングします。

これが例です。 http://jsfiddle.net/W8qkE/

于 2013-01-23T19:51:30.747 に答える