2014-11-11 6 views
0

Мне нужно получить номер только из атрибута (Число динамическое). Кнопка/якорь выглядит следующим образом:Выберите часть атрибута - JQuery

<a href="#" class="btn btn-danger btn-small" data-removefield="collection" data-field="bc_inventorybundle_menu_product_0">Delete Dish</a> 

часть мне нужно препарировать этот бит «bc_inventorybundle_menu_product_0» Я хочу только номер, для использования в другой функции (удалить LI с идентификатором menuitem0_dish)

кода я использую для выбора в другом месте идентификаторам является:

function getNum(element, attrPrefix) { 
     //set prefix, get number 
     var prefix = attrPrefix; 
     var num = element.attr("id").substring((prefix.length)); 
     return num; 
    } 

он отлично работает на идентификаторы, но я не могу показаться, чтобы заставить его работать на атрибуты вместо идентификаторов

Таким образом пользователь нажимает кнопку удалить bc_inventorybundle_menu_product_0 затем JQuery удаляет < литий ID = «menuitem0_dish»>

Я не могу добавить идентификатор к кнопке, так что я должен использовать атрибут кнопки. Как я уверен, вы можете сказать, что я полный noob, когда речь заходит о JS/JQuery.

EDIT

Прочитав все ответы, я чувствую, что, возможно, потребуется разработать немного.

Я думаю, что самая большая проблема возникает при нажатии кнопки Button/Anchor.

То, что я в настоящее время это, что я знаю, что должно быть неправильно:

$(document).on('click', 'data("field")', function(event) { 
     deleteDish(this); 
    }); 

    function getbutNum(element, attrPrefix) { 
     //set prefix, get number 
     var prefix = attrPrefix; 
     var butnum = element.data("field").substring(prefix.length); //Changed as per suggestions 
     return butnum; 
    } 

    function deleteDish(field) { 
     var numbut = getbutNum(); 
     //Delete the UL/LI 
     console.log("Num But" + numbut); 
     } 

Asides от всего остального это дает мне ошибку «непризнанного выражение: данные („поле“)»

ответ

2

Вы пробовали выбрать свой фактический атрибут данных:

var num = element.attr("data-field").substring(prefix.length); 

Или:

var num = element.data("field").substring(prefix.length); 

EDIT

Первый добавить класс на свой якорный элемент (я иду в предположении, что вы ч пр более чем один из них):

<a href="#" class="btn btn-danger btn-small delete-dish" data-removefield="collection" data-field="bc_inventorybundle_menu_product_0">Delete Dish</a> 

Тогда:

$(".delete-dish").on("click", function (e) { 
    e.preventDefault(); 

    var fieldData = $(this).data("field"), 
     num = fieldData.substring(fieldData.lastIndexOf("_") + 1); 

    console.log("Num But" + num); 
}); 

Вот fiddle продемонстрировать

+0

Трещил это :), взял много возиться. Ваше точное решение не совсем сработало для меня, однако оно определенно указывало мне в правильном направлении, поэтому я принимаю ваш ответ. Надеюсь, это тоже поможет кому-то другому. – Doug

1

Может, что-то вроде этого?

var getNumberFromAttribute = function(id, field) { 
    var field = $(id).data(field); 
    var parts = field.split("_"); 
    return parts[parts.length - 1] 
} 

Вот jsfiddle http://jsfiddle.net/o6go79cL/

UPDATE

Вы можете просто передать в элементе. Единственной целью id было выбрать объект.Таким образом, вы можете просто сделать:

var getNumberFromAttribute = function(elm, field) { 
    var field = $(elm).data(field); 
    var parts = field.split("_"); 
    return parts[parts.length - 1] 
} 

number = getNumberFromAttribute(anchorTag, "field"); 
+0

Как бы эта работа без использования поля ID? – Doug

2

Используя имя атрибута, содержащее ваш вход должен работать:

function getNum(element, attrPrefix) { 
     //set prefix, get number 
     var prefix = attrPrefix; 
     var num = element.attr("data-field").substring((prefix.length)); 
     return num; 
} 

http://jsfiddle.net/zf3hmo4q/

1

Учитывая вы хотите проанализировать атрибуты с «data- *» Имя:

 
function getNum(element, dataName, dataPrefix) { 
    var num = element.data(dataName).replace(dataPrefix, ""); 
    return num; 
} 
console.log(getNum($(".btn"), "field", "bc_inventorybundle_menu_product_")); 
Смежные вопросы