Сделайте текст столбца строки полужирным и отстегиваемым на кнопку щелчка [дубликат]

Вот некоторые подходы к работе с асинхронными запросами:
  1. Объект обезьяны браузера
  2. Q - A
  3. A + Promises.js
  4. jQuery отложен
  5. API XMLHttpRequest
  6. Использование концепции обратного вызова - как реализация в первом ответе

Пример: jQuery отложенная реализация для работы с несколькими запросами

var App = App || {};

App = {
    getDataFromServer: function(){

      var self = this,
                 deferred = $.Deferred(),
                 requests = [];

      requests.push($.getJSON('request/ajax/url/1'));
      requests.push($.getJSON('request/ajax/url/2'));

      $.when.apply(jQuery, requests).done(function(xhrResponse) {
        return deferred.resolve(xhrResponse.result);
      });
      return deferred;
    },

    init: function(){

        this.getDataFromServer().done(_.bind(function(resp1, resp2) {

           // Do the operations which you wanted to do when you
           // get a response from Ajax, for example, log response.
        }, this));
    }
};
App.init();
129
задан Braiam 2 November 2014 в 00:06
поделиться

6 ответов

$('b').contents().unwrap();

Это выбирает все <b> элементы, тогда использует .contents() для таргетинга текстового содержимого <b>, , затем .unwrap() , чтобы удалить его родительский элемент <b>.


Для максимальной производительности всегда начинайте native:

var b = document.getElementsByTagName('b');

while(b.length) {
    var parent = b[ 0 ].parentNode;
    while( b[ 0 ].firstChild ) {
        parent.insertBefore(  b[ 0 ].firstChild, b[ 0 ] );
    }
     parent.removeChild( b[ 0 ] );
}

Это будет намного быстрее, чем любое предоставленное здесь решение jQuery.

272
ответ дан user113716 23 August 2018 в 20:39
поделиться

Другое собственное решение (в кофе):

el = document.getElementsByTagName 'b'

docFrag = document.createDocumentFragment()
docFrag.appendChild el.firstChild while el.childNodes.length

el.parentNode.replaceChild docFrag, el

Я не знаю, быстрее ли это, чем решение user113716, но для некоторых это может быть проще понять.

0
ответ дан GijsjanB 23 August 2018 в 20:39
поделиться

Вы также можете использовать .replaceWith() , например:

$("b").replaceWith(function() { return $(this).contents(); });

Или, если вы знаете, что это просто строка:

$("b").replaceWith(function() { return this.innerHTML; });

Это может иметь большое значение, если вы разворачиваете множество элементов, поскольку любой из вышеперечисленных методов значительно быстрее , чем стоимость .unwrap() .

46
ответ дан Nick Craver 23 August 2018 в 20:39
поделиться
// For MSIE:
el.removeNode(false);

// Old js, w/o loops, using DocumentFragment:
function replaceWithContents (el) {
  if (el.parentElement) {
    if (el.childNodes.length) {
      var range = document.createRange();
      range.selectNodeContents(el);
      el.parentNode.replaceChild(range.extractContents(), el);
    } else {
      el.parentNode.removeChild(el);
    }
  }
}

// Modern es:
const replaceWithContents = (el) => {
  el.replaceWith(...el.childNodes);
};

// or just:
el.replaceWith(...el.childNodes);

// Today (2018) destructuring assignment works a little slower
// Modern es, using DocumentFragment.
// It may be faster than using ...rest
const replaceWithContents = (el) => {
  if (el.parentElement) {
    if (el.childNodes.length) {
      const range = document.createRange();
      range.selectNodeContents(el);
      el.replaceWith(range.extractContents());
    } else {
      el.remove();
    }
  }
};
0
ответ дан redisko 23 August 2018 в 20:39
поделиться

Как насчет этого?

$("b").insertAdjacentHTML("afterend",$("b").innerHTML);
$("b").parentNode.removeChild($("b"));

Первая строка копирует содержимое HTML тега b в местоположение непосредственно после тега b, а затем вторая строка удаляет b из DOM, оставляя только скопированное содержимое.

Обычно я обертываю это в функцию, чтобы упростить ее использование:

function removeElementTags(element) {
   element.insertAdjacentHTML("afterend",element.innerHTML);
   element.parentNode.removeChild(element);
}

Весь код на самом деле чистый Javascript, единственный используемый JQuery - это выбор целевого элемента (тег b в первом примере). Функция просто чиста JS: D

Также смотрите:

2
ответ дан Toastrackenigma 23 August 2018 в 20:39
поделиться

Самый простой способ удалить внутренние элементы html и вернуть только текст будет Функция JQuery .text () .

Пример:

var text = $('<p>A nice house was found in <b>Toronto</b></p>');

alert( text.html() );
//Outputs A nice house was found in <b>Toronto</b>

alert( text.text() );
////Outputs A nice house was found in Toronto

jsFiddle Demo

11
ответ дан WebChemist 23 August 2018 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: