Прямые действия над html () и text () в jQuery - PullRequest
0 голосов
/ 10 ноября 2009

Есть ли способ сообщить jQuery, что вы хотите, чтобы к нему применялось то, что когда-либо будет после text() или html()? Трудно объяснить, легче показать:

$("#someElement").html().replace(oldWord, newWord, "g");

Вышесказанное не изменит DOM, вам нужно будет сделать:

$("#someElement").html($("#someElement").html().replace(oldWord, newWord, "g"));

которая является болью в а **.

edit: Что я хотел бы увидеть, так это возможность сделать это:

$("#someElement").html(.replace(oldWord, newWord("g"));

Не знаю, возможно ли это, или даже практично, действительно. Есть ли причина, по которой это не могло быть сделано?

Ответы [ 3 ]

3 голосов
/ 10 ноября 2009

Нет, эти функции возвращают строки, а не jQuery. Сначала вам нужно получить значение, выполнить магию, а затем установить значение обратно. Вам также придется делать это с простым javascript, но синтаксис может быть не таким утомительным.

 var elem = $("#someElement").get(0);
 elem.innerHTML = elem.innerHTML.replace(oldWord,newWord,"g");

Лично я бы придерживался jQuery, но отделил бы его, чтобы сделать его более читабельным.

 var elem = $("#someElement");
 var html = elem.html();
 elem.html( html.replace(oldWord,newWord,"g") );
3 голосов
/ 10 ноября 2009

Вы можете легко превратить это в простой плагин:

jQuery.fn.replaceHTML = function (old, new) {
    return this.each(function() {
        var $t = $(this);
        $t.html($t.html().replace(old, new);
    });
};

// usage:
$('#myElement').replaceHTML('foo', 'bar');
$('#anotherElement').replaceHTML(/f(?:oo|u)/g, 'bar');

Это также не сломает вашу цепочку:

$('#blah').replaceHTML('abc', 'def').hide();

Как прокомментировал Дуг Д., просто помните, что регулярные выражения + html могут быть непредсказуемыми и могут вызвать проблемы, если вы не будете очень осторожны.

0 голосов
/ 10 ноября 2009

Нет, вы получаете HTML-код в виде строки, и вам нужно вернуть строку после ее изменения.

Чтобы такая конструкция работала, функция html должна возвращать объект, имеющий методы типа replace, которые можно использовать для изменения содержимого. Однако это не будет эффективно, если вы захотите применить более одного изменения (что в значительной степени является смыслом методов цепочки), так как для этого потребуется получить HTML-код и вернуть его для каждого изменения. Когда вы получаете HTML-код в виде строки, вы можете делать с ним все что угодно и возвращать его обратно, когда закончите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...