Как загрузить файл src javascript в новую вкладку [duplicate]

Для тех, с кем он не подходит, чтобы пожертвовать всей эффективностью для размера кода и увидеть «эффективный» как тип элегантности, следующее должно поразить сладкое пятно (и я думаю, что класс контейнера-контейнера является удивительно элегантным дополнением .):

template < class ContainerT >
void tokenize(const std::string& str, ContainerT& tokens,
              const std::string& delimiters = " ", bool trimEmpty = false)
{
   std::string::size_type pos, lastPos = 0, length = str.length();

   using value_type = typename ContainerT::value_type;
   using size_type  = typename ContainerT::size_type;

   while(lastPos < length + 1)
   {
      pos = str.find_first_of(delimiters, lastPos);
      if(pos == std::string::npos)
      {
         pos = length;
      }

      if(pos != lastPos || !trimEmpty)
         tokens.push_back(value_type(str.data()+lastPos,
               (size_type)pos-lastPos ));

      lastPos = pos + 1;
   }
}

Я обычно предпочитаю использовать типы std::vector<std::string> как мой второй параметр (ContainerT) ... но list<> быстрее, чем vector<>, когда прямой доступ не нужен, и вы даже можете создать свой собственный класс строк и использовать что-то вроде std::list<subString>, где subString не делает никаких копий для невероятной скорости.

Это более чем вдвое быстрее, чем самый быстрый токенизатор на этой странице и почти в 5 раз быстрее, чем некоторые другие. Кроме того, с идеальными типами параметров вы можете исключить все копии строк и списков для дополнительного увеличения скорости.

Кроме того, он не выполняет (крайне неэффективный) возврат результата, а скорее пропускает токены в качестве ссылки, таким образом, вы также можете создавать токены, используя несколько вызовов, если вы этого пожелаете.

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

Все, что ему нужно, это std::string ... остальные не являются обязательными. Он не использует потоки или ускоряющую библиотеку, но достаточно гибкий, чтобы естественным образом принимать некоторые из этих иностранных типов.

88
задан hippietrail 10 August 2012 в 18:51
поделиться

9 ответов

Если вы пытаетесь запустить некоторый динамически сгенерированный JavaScript, вам будет немного лучше, используя eval. Тем не менее, JavaScript - это такой динамический язык, который вам действительно не нужен.

Если сценарий статичен, значит, [RGG] [r2] -suggestion - это путь.

-3
ответ дан albert 25 August 2018 в 06:37
поделиться

Этот ответ технически подобен или равен тому, что ответил jcoffland. Я просто добавил запрос, чтобы определить, присутствует ли скрипт или нет. Мне нужно это, потому что я работаю на веб-сайте интрасети с несколькими модулями, некоторые из которых используют сценарии или приносят свои собственные, но эти сценарии не нужно загружать каждый раз снова. Я использую этот фрагмент с более чем года в производственной среде, он работает как charme. Комментируя себя: Да, я знаю, было бы правильнее спросить, существует ли функция ...: -)

if (!$('head > script[src="js/jquery.searchable.min.js"]').length) {
    $('head').append($('<script />').attr('src','js/jquery.searchable.min.js'));
}
5
ответ дан ddlab 25 August 2018 в 06:37
поделиться

Простейший способ:

$('head').append('<script type="text/javascript" src="your.js"></script>');

Вы также можете использовать эту форму для загрузки css.

8
ответ дан iman 25 August 2018 в 06:37
поделиться

Попробуйте следующее:

<script type="text/javascript">
// Use any event to append the code
$(document).ready(function() 
{
    var s = document.createElement("script");
    s.type = "text/javascript";
    s.src = "http://scriptlocation/das.js";
    // Use any selector
    $("head").append(s);
});

http://api.jquery.com/append

56
ответ дан isherwood 25 August 2018 в 06:37
поделиться

Вот правильный способ сделать это с помощью современных (2014) JQuery:

$(function () {
  $('<script>')
    .attr('type', 'text/javascript')
    .text('some script here')
    .appendTo('head');
})

или если вы действительно хотите заменить div, который вы могли бы сделать:

$(function () {
  $('<script>')
    .attr('type', 'text/javascript')
    .text('some script here')
    .replaceAll('#someelement');
});
28
ответ дан jcoffland 25 August 2018 в 06:37
поделиться

Пример:

var a = '<script type="text/javascript">some script here</script>';
$('#someelement').replaceWith(a);

Он должен работать. Я попробовал; такой же результат. Но когда я использовал это:

var length = 1;
var html = "";
for (var i = 0; i < length; i++) {
    html += '<div id="codeSnippet"></div>';
    html += '<script type="text/javascript">';
    html += 'your script here';
    html += '</script>';
}
$('#someElement').replaceWith(a);

Это сработало для меня.

Редактирование: я забыл #someelement (кстати, я мог бы использовать #someElement из-за условностей)

Самое главное здесь: + = поэтому html добавляется и не заменяется.

Оставить комментарий, если он не работает. Я хотел бы помочь вам!

2
ответ дан L84 25 August 2018 в 06:37
поделиться

Существует одно обходное решение, которое звучит скорее как взлом, и я согласен, что это не самый элегантный способ сделать это, но работает на 100%:

Скажите, что ваш ответ AJAX похож на

<b>some html</b>
<script>alert("and some javscript")

Обратите внимание, что я специально пропустил закрывающий тег. Затем в скрипте, который загружает указанное выше, сделайте следующее:

$.ajax({
    url: "path/to/return/the-above-js+html.php",
    success: function(newhtml){
        newhtml += "<";
        newhtml += "/script>";
        $("head").append(newhtml);
    }
});

Просто не спрашивайте меня, почему :-) Это одна из тех вещей, которые я пришел в результате отчаянного почти случайных проб и неудач.

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

В такие моменты, как я, мне нравится Я успешно делим на ноль.

2
ответ дан Mike Lyons 25 August 2018 в 06:37
поделиться

Вот гораздо более ясный способ: нет необходимости в jQuery & mdash; который добавляет скрипт в качестве последнего дочернего элемента <body>:

document.body.innerHTML +='<script src="mycdn.js"><\/script>'

Но если вы хотите добавить скрипты и load , используйте Метод Ракета Хазмата .

0
ответ дан Nathan Tuggy 25 August 2018 в 06:37
поделиться

Вы можете поместить скрипт в отдельный файл, затем используйте $.getScript , чтобы загрузить и запустить его.

Пример:

$.getScript("test.js", function(){
    alert("Running test.js");
});
88
ответ дан Rocket Hazmat 25 August 2018 в 06:37
поделиться
Другие вопросы по тегам:

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