Як об'єднати рядок зі змінною?


78

Отже, я намагаюся зробити рядок із рядка та переданої змінної (яка є числом). Як це зробити?

У мене є щось подібне:

function AddBorder(id){
    document.getElementById('horseThumb_'+id).className='hand positionLeft'
}

То як я можу одержати цей 'horseThumb' та ідентифікатор в один рядок?

Я спробував усі різні варіанти, я також погуглив, і крім того, що дізнався, що можу вставити змінну в такий рядок getElementById("horseThumb_{$id}")<- (не працював у мене, не знаю чому), я не знайшов нічого корисного. Тож будь-яка допомога буде дуже вдячна.


9
Якраз так, як ти це зробив. Але якщо ви хочете бути явним, ви можете змінити idна id.toString().
Cᴏʀʏ

4
Так, ви зробили це правильно. Якщо це "не працює", то щось інше не так, як насправді немає елемента з цим ідентифікатором.
Бен Зотто,

1
Цей код: getElementById("horseThumb_{$id}")це не JavaScript, це PHP. Отже, тому у вас це не спрацювало.
Доменік

1
Ваш синтаксис правильний, але перевірте регістр елемента, пам’ятайте, що Javascript чутливий до регістру. Деякі браузери дозволять знайти елемент, що не чує регістр, але не всі браузери роблять це
Sparky

1
@Cory Це ніколи не потрібно. Аргумент id об'єднується в рядок, ergo, він буде примушений до типу String. Інший випадок може бути, якщо ви не знаєте, який тип іншого оператора, - але в цьому випадку це s-літеральний рядок, тому кастинг не потрібен.
Шіме Відас,

Відповіді:


63

Ваш код правильний. Можливо, ваша проблема полягає в тому, що ви не передаєте ідентифікатор AddBorderфункції, або що елемент з цим ідентифікатором не існує. Або ви можете запускати свою функцію до того, як відповідний елемент буде доступний через DOM браузера.

Щоб визначити перший випадок або визначити причину другого випадку, додайте їх як перші рядки всередині функції:

alert('ID number: ' + id);
alert('Return value of gEBI: ' + document.getElementById('horseThumb_' + id));

Це відкриє спливаючі вікна при кожному виклику функції зі значенням idта поверненим значенням document.getElementById. Якщо ви отримуєте undefinedспливаюче вікно з ідентифікаційним номером, ви не передаєте аргумент функції. Якщо ідентифікатора не існує, ви отримаєте свій (неправильний?) Номер ідентифікатора у першому спливаючому вікні, але отримаєте nullу другому.

Третій випадок може статися, якщо ваша веб-сторінка виглядає так, намагаючись запустити, AddBorderпоки сторінка все ще завантажується:

<head>
<title>My Web Page</title>
<script>
    function AddBorder(id) {
        ...
    }
    AddBorder(42);    // Won't work; the page hasn't completely loaded yet!
</script>
</head>

Щоб виправити це, покладіть увесь код, який використовує AddBorder, всередині onloadобробника подій:

// Can only have one of these per page
window.onload = function() {
    ...
    AddBorder(42);
    ...
} 

// Or can have any number of these on a page
function doWhatever() {
   ...
   AddBorder(42);
   ...
}

if(window.addEventListener) window.addEventListener('load', doWhatever, false);
else window.attachEvent('onload', doWhatever);

Це не буде працювати для деяких вбудованих движків JavaScript - таких як mJS - призведе до помилки MJS callback error: implicit type conversion is prohibited. Для цього випадку потрібно використовувати явне перетворення типу
N0dGrand87

34

У javascript оператор "+" використовується для додавання чисел або об'єднання рядків. якщо один з операндів є рядком, який об'єднується "+", і якщо це лише числа, він додає їх.

приклад:

1+2+3 == 6
"1"+2+3 == "123"

8
І просто для розваги, який результат 2 + "3" - 5:? (без обману)

Або, ще краще, результат 4+"5"-3:?
matsr

6
занадто пізно відповідати, але ... 2 + "3" will дає "23" (шляхом об'єднання) і "23" - 5 will дає вам 18 (віднімання зробіть синтаксичний розбір для рядка) Ви можете перевірити це на своїй консолі ...
Кадірі

2
Ніколи не забувайте, що оператори оцінюються зліва направо, тому:1+2+'3'+4+5 // 3345
Жюльєн Берубе

4

Це може статися, тому що сценарій Java іноді дозволяє пробіли, якщо рядок об'єднано з номером. спробуйте видалити пробіли і створити рядок, а потім передати його в getElementById.

приклад:

var str = 'horseThumb_'+id;

str = str.replace(/^\s+|\s+$/g,"");

function AddBorder(id){

    document.getElementById(str).className='hand positionLeft'

}

1

Це як у вас. І я дам вам невеличку пораду щодо таких безглуздих речей: просто скористайтеся полем веб-переглядача, щоб спробувати синтаксис js. наприклад, напишіть це: javascript:alert("test"+5)і ви отримаєте свою відповідь. Проблема у вашому коді, мабуть, полягає в тому, що цього елемента у вашому документі немає ... можливо, він знаходиться всередині форми чи щось інше. Ви можете також перевірити це, написавши на url: javascript:alert(document.horseThumb_5)щоб перевірити, де ваша помилка.


1

Ще один спосіб зробити це простіше за допомогою jquery.

зразок:

function add(product_id){

    // the code to add the product
    //updating the div, here I just change the text inside the div. 
    //You can do anything with jquery, like change style, border etc.
    $("#added_"+product_id).html('the product was added to list');

}

Де product_id - це javascript var, а $ ("# added _" + product_id) - це ідентифікатор div, об'єднаний з product_id, var від функції add.

З найкращими побажаннями!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.