Как добавить Div между двумя разделениями на основе их идентификаторов с помощью Jquery?

#jquery #jquery-selectors #javascript

#jquery #jquery-селекторы #javascript

Вопрос:

Если у меня есть эти объекты:

 <div id='1'></div>
<div id='2'></div>
<div id='3'></div>
<div id='4'></div>
<div id='5'></div>
  

У меня есть текстовое поле:

 <input type="text">
  

Где я ввожу значение: 3.5 для динамического создания (у меня есть код для этого, со следующей частью мне нужна помощь):

 <div id='3.5'></div>
  

Как я могу прикрепить их в указанном ниже порядке, не проверяя сначала значение каждого div на странице?

 <div id='1'></div>
<div id='2'></div>
<div id='3'></div>
<div id='3.5'></div>
<div id='4'></div>
<div id='5'></div>
  

Используя:

 $('#What Goes Here If I Dont know the elements on the page?').after('<div id='3.5'>Hey</div>');
  

Приветствуется любая помощь,

Тейлор

Комментарии:

1. Я не думаю, что в CSS допустимо иметь идентификаторы или классы, начинающиеся с числа.

2. Зачем вам сортированные ID: ы? Или зачем вам вообще нужны ID: s? Если у вас есть div, содержащий идентификатор (или класс), вы можете получить доступ к его дочерним элементам по порядку.

3. Да, я прошу прощения за то, что идентификатор в моем примере является числом, я написал это только для целей этого примера

Ответ №1:

Идентификаторы в DOM не должны начинаться с числа (они были бы недействительными).
Они должны начинаться с символа A-Za-z , а затем у них могут быть цифры, - и _ следующие.

но если вы хотите пойти своим путем, попробуйте это:

 var div = $("<div id='3.5'></div>");
div_id_after = Math.floor(parseFloat(div.get(0).id));

$('#' div_id_after).after(div);
  

Вот демонстрация скрипки: http://jsfiddle.net/maniator/DPMV5 /

Комментарии:

1. Я знаю, извините, для целей этого примера я хотел упростить, я, конечно, приму во внимание правила для идентификаторов

2. @TaylorMac, смотрите Мое обновление, создающее fiddle сейчас (который jsfiddle на данный момент не загружается)

3. Потрясающе. Это было бы здорово, я никогда раньше не видел использования parseFloat

4. @Neal: Я рад слышать, что не только для меня JS Fiddle работает медленно этим вечером…

5. @Нил, я знаю. JS Fiddle по какой-то причине весь вечер испытывал трудности. Может быть, это просто очень, очень популярно в наши дни?

Ответ №2:

Что в этом плохого?

   $('#3').after('<div id='3.5'>Hey</div>');
  

Комментарии:

1. Он хочет динамически находить div, который он должен вставить после.

2. @Нил, я сделал. Довольно оригинальное решение 🙂

3. Да, я ввожу идентификатор, поэтому не было бы способа использовать эту функцию, чтобы прикрепить его к правильному местоположению, потому что $ (‘# 3’) уже определен

Ответ №3:

Во-первых, идентификаторам не разрешается начинаться с числа.

Игнорируя это, если вы разрешаете только целые числа, это легко, просто возьмите 1 из значения и вставьте его, затем перенумеруйте остальные. В противном случае вам придется сначала пройти по DOM, чтобы проверить значения остальных.

Ответ №4:

это сравнение для добавления является арифметическим, поэтому, к сожалению, вам нужно выполнить итерацию по разделам, которые вы могли бы сделать это. может быть, вам следует добавить дополнение, например, 3 = 300000, поэтому 3.5 равно 3500000, для наилучшего сравнения.

Ответ №5:

Может быть, что-то подобное сработало бы:

 var text = yourTextBox.value;
if(var number = Number(text))
{
    $('#' Math.floor(number)).after('<div id=' text '>Hey</div>');
} 
else alert("wrong number");
  

Но вам, вероятно, следует сначала проверить (с помощью регулярного выражения), что текст в текстовом поле является допустимым числом…

Ответ №6:

Живая демонстрация

 var input = "3.5";
var parent = Math.floor(input);
var dest = $('#div-' parent);

dest.after(dest.clone().attr('id','div-' input).text(input));
  

Примечание: Это сработает только один раз между целыми числами. Более надежный метод требует просмотра идентификаторов всех разделений в пределах назначения.

Ответ №7:

обновлено. спасибо, Нил.

http://jsfiddle.net/FB8xG/3/

 var newValue = 3.5;

var oldValue = Math.floor(newValue); //3

var oldValueID = ('#'   oldValue);
var newValueID = ('<div id="'   newValue   '">'   newValue   '</div>');

$(oldValueID).after(newValueID);
  

Комментарии:

1. вы можете сделать: var oldValue = Math.floor(newValue); //3