#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:
обновлено. спасибо, Нил.
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