jQuery clone () элемент с дочерними элементами и сохранение в data () в качестве резервной копии? - PullRequest
0 голосов
/ 31 января 2012

Что-то не так в моем плагине jQuery.Я не могу опубликовать весь сценарий, потому что он будет слишком большим, это небольшой и измененный отрывок.В основном это работает следующим образом:

  1. Ajax-вызов, , если набор результатов пуст , затем сделайте резервную копию элемента и его содержимого (если резервная копия не определена) и переопределить его содержимое
  2. Если результирующий набор содержит данные, найдите в нем определенные элементы и используйте .html () для отображения данных

Но что-то не так ввыше.Когда вызов выполняется 3 раза подряд, дочерние элементы резервной копии печально пусты!

Любая помощь очень ценится.Вот упрощенная версия потока управления:

var backup = function() { this.data('backup', this.clone(true)); }

var onObjectProperty = function(obj) {

   // This is where my script fail!!! 3 consecutive times of empty data,
   // and children() contains no data!
   if($.type(this.data('backup')) !== 'undefined')
      console.log(this.data('backup').children());

    };

if(!val.error && !val.count) // Not an error, but data is empty
{
   // Keyword "this" is the current element in selection loop (on which
   // the plugin was invoked)
   if($.type(context.data('backup')) === 'undefined')
      backup.call(this); // Backup if not already defined

   opt.onEmpty.call(context); // Call the function to handle empty data
   return true; // Skip the current iteration in the loop
}

// Here we have no errors and result set contains data
onObjectProperty.call(this, obj); // Pass the context and the data

EDIT: обнаружил ошибку, не клонировал резервную копию перед добавлением ее в DOM!

1 Ответ

1 голос
/ 31 января 2012

Что с круглыми скобками на второй строке, если - $. Type?=)

Хорошо, понял.Не уверен, как читать все эти "obj", "context" и "val", как они вписываются, но для чего я смог получить резервные копии данных, см. Ниже.

КлассноИдея в любом случае!

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script>
var backup = function() { this.data("backup", this.clone(true)); }
function doit(x) { if ($.type(x.data("backup")) == "undefined") { backup.call(x); } }
function dumpit(x) {
    if ($.type(x.data("backup")) != "undefined") {
        console.log("backup", x.data("backup"));
        console.log("children", x.data("backup").children());
    }
}
function addit(x) {
    if ($.type(x.data("backup")) != "undefined") {
        var x = x.data("backup").clone();
        x.attr("id",null);
        $("body").append(x);
    }
}
</script>
</head>
<body>
    <div id="xxx" class="yyy">
        <p class="zzz">helu</p>
        <a href="#">there</a>
        <input></input>
    </div>
    <button onclick="doit($('#xxx'));">do</button>
    <button onclick="dumpit($('#xxx'));">see</button>
    <button onclick="addit($('#xxx'));">add</button>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...