2

ユーザーが作成したHTMLテンプレートを保存できるアプリケーションに取り組んでいます。ここで、ユーザーは自由に使用できるいくつかのHTMLコンポーネントを使用でき、それらのコンポーネントを使用して静的HTMLページを作成できます。

javascript関数を使用してページのコンテンツを自動保存しています。

     function saveContent(){    
        //var getContent=$('#mainWrap').children().removeAttr('id');
        var $getContent=$('#mainWrap');
        var $finalContent=$getContent.children().removeAttr('id');
        var auto="auto";
        var pageId = <?php echo $pageId;?>; 
        var webId  = <?php echo $webId;?>;
        var userId = <?php echo $userId;?>;
        $.ajax({
            url:"auto_save.php",
            type:"POST",
            dataType:"text",
            data:"txtComp="+$('#mainWrap').html()+"&auto="+auto+"&pageId="+pageId+"&webId="+webId+"&userId="+userId
        }); 
    }   

    var interval = 1000 * 60 * 0.30; // where X is your every X minutes
    setInterval(saveContent,interval);

問題:ユーザーが保存したHTMLコンポーネントからIDを削除したいのですが、IDは自動生成され、ユーザーがテンプレートを公開するときに必要ないためです(作成後のドメインで)。と呼ばれるページ全体をラップするメインラッパーがありますid=mainWrap。このようにIDを削除しようとすると、 $('#mainWrap').children().removeAttr('id');それらはDOMの現在のコンテキストからも削除されます。つまり、ユーザーがテンプレートを編集しているページからも削除されます。

質問:mainWrapオブジェクトの現在のコンテキストに影響を与えずに、HTML要素からIDを削除するにはどうすればよいですか?

このような別のオブジェクトに割り当ててみました

    var $getContent=$('#mainWrap');
    var $finalContent=$getContent.children().removeAttr('id');

しかし、それでも失敗しました。

これが可能かどうかについてのコメントや修正はありますか?それとも私はこれを間違った方法で行っていますか?

更新:この問題はある程度解決されています。次に、ユーザーが編集ページに戻ったときにIDを追加します。このコードを使用して上記の保存されたコンテンツを取得します

    <?php
    $sqlEdit = "select revisionContent from tbl_revision where revisionId='".$_SESSION['contentId']."'"; //The query to get the record
    $rsEdit = $dbObj->tep_db_query($sqlEdit);//The database object to execute the query   
    $resEdit = $dbObj->getRecord($rsEdit);                                                                                       
    $IdLessContent = $resEdit['revisionContent'];//Variable with the record

     ?>

今、私はこのPHP変数をjavascriptで使用したいので、これを行いました。

  <script language="javascript">
    var getSavedContent = '<?php echo json_encode($IdLessContent); ?>';
    var trimmedCont=($.trim(getSavedContent).slice(1));
    //console.log(trimmedCont);
    var lengthCont= trimmedCont.length;
    var trimmedCont=$.trim(trimmedCont.slice(0,lengthCont-1));
    var pageContent=$('<div class="addId">').append(trimmedCont);  //Here I tried creating a div dynamically and appending the content to the div.But now I am not able to manipulate or work on this dyamic div and get NULL when I alert saying $('.addId').html();
    $('.addId').children().attr('id', 'test');               //I tried doing this but does not work

これは機能していません。光を当ててください。

4

1 に答える 1

2

の要素を循環して、次のような要素#mainWrapを削除することができます。id

var getContent = $('#mainWrap');
var finalContent = getContent.parent().clone().find('*').removeAttr('id');

例: http: //jsfiddle.net/7m8g4/6/

idセキュリティ面では、これがhtmlから属性を削除するクライアント側のスクリプトであることを理解する必要があります。JavaScriptを操作したり、(たとえば)誤ったデータを使用してAjaxリクエストのURLを直接呼び出すことでJavaScriptをバイパスする方法はいくつかあります。

したがって、JavaScriptだけに頼るべきではありません。何らかの理由でJavaScriptが期待どおりに機能しない場合でも、コードが問題を引き起こさないことを確認してください。これは、たとえば、id属性を検索して(正規表現idを使用)、まだいくつかの属性が見つかった場合にエラーメッセージを生成することで実行できます。もう1つの方法は、サーバー側(PHPの場合)も見つかった場合はそれらを削除することです。これを実現するには、正規表現検索を実行して、一致するものを空の文字列に置き換えるか、サブ文字列を使用します。君による!

それがすべて理にかなっていることを願っています!

編集

後で新しい属性を追加したい場合idは、次のようにすることができます。

var newContent = $(finalContent).first().wrap('<div class="addId" />');
newContent = $(newContent).parent().find('*').each(function(index, value) {
   $(this).attr('id', index);
});

ここでの作業でそれを参照してください。

于 2013-01-22T13:52:45.747 に答える