2010-10-15 7 views
8

Как найти номер seq с идентификатором в этом примере?javascript - получить пользовательский атрибут на основе идентификатора

<table> 
<tr class="row_header thin_border"> 
    </tr><tr id="id33192010101533333" seq="2"> 
    <td>20101015</td> 
    <td>600</td> 
    <td>730</td>   
    <td><a href="#" onclick="deleteActivity(3319,20101015,1);">Click</a></td> 
    <td><a href="#" onclick='selectEditActivity("id3319201010153333");'>Click</a></td> 
    </tr> 

    <tr id="id3319201010151111" seq="3"> 
    <td>20101015</td> 
    <td>600</td> 
    <td>730</td>   
    <td><a href="#" onclick="deleteActivity(3319,20101015,1);"> <img src="/bbhtml/img/deleteAction.png"></a></td> 
    <td><a href="#" onclick='selectEditActivity("id3319201010151111");'><img src="/bbhtml/img/editAction.png"></a></td> 
    </tr> 
<table> 


<script> 
    function selectEditActivity(pass_id){ 
     alert("seq# =:" + ???) 
    } 
</script> 

ответ

28

попробовать это

var id = document.getElementById("divId").getAttribute("attributeId"); 
+3

Может добавить, что теперь вы можете использовать «data-seq» в качестве допустимого настраиваемого атрибута в HTML 5 – Kasapo

1

Вы хотите использовать objRef.getAttribute('seq') или план старой точечной нотации objRef.seq

+2

Доступ к данным, подобный 'objRef.seq', не будет работать для пользовательских атрибутов, поскольку HTML DOM не имеет сопоставления между ними. (За исключением IE <8 из-за ошибок.) Это единственный раз, когда использование 'getAttribute' в HTML-документе на самом деле правильное. Хотя можно утверждать, что пользовательские атрибуты вообще не правильные вещи. – bobince

+0

@bobince Резервное копирование с помощью jsbin, и я дам вам cookie. Я не уверен, откуда вы получили эту информацию. – epascarello

+0

http: // jsbin.com/ojiyu4/2 - bof/undefined во всех браузерах, кроме IE <9 (я обманывал IE8! это 9, где это окончательно исправлено) из-за вышеупомянутой ошибки: IE не понимает разницу между атрибутами и свойствами, вызывая широкий спектр известных проблем. В общем, свойства DOM - это разные вещи для атрибутов, и их не следует путать: рассмотрите, например, разницу между атрибутом 'value' (входным значением по умолчанию) и значением' value' (текущее значение). – bobince

6

Получить элемент DOM, а затем получить seq атрибут:

document.getElementById(id).getAttribute('seq'); // note: this will return a string, and getElementById might return null in case there is no element with the given id. 
+0

Я очень близко .... \t \t // это работает \t \t предупреждение (pass_id) \t \t // это работает; \t \t var A = document.getElementById ("id33192010101533333"). GetAttribute ("seq"); \t \t предупреждение (A); \t \t // но не используется, когда я использую переменную \t \t var B = document.getElementById (pass_id) .getAttribute ("seq"); \t \t alert (B); вы можете редактировать комментарий только раз в 5 секунд. (Нажмите на это поле, чтобы уволить) – robert

+0

Спасибо, что работает. – robert

2

Как для получения атрибута на основе идентификатора

С JQuery:

var seq = $('#id33192010101533333').attr("seq"); 

Без JQuery:

vvar seq = document.getElementById("id3319201010151111").getAttribute("seq"); 

Вы можете попробовать их обоих this Fiddle.

Оба варианта должны работать в любом браузере!


То, что вы действительно хотите

Прежде всего, это лучше назвать свой пользовательский атрибут data-seq вместо seq. Стандарт HTML5 позволяет создавать пользовательские элементы, но только считает их действительными, когда их имя начинается с data-.

Кроме того, не рекомендуется размещать обработчики кликов непосредственно в вашем CSS. Лучше использовать свойство class или какое-либо своеобразное свойство data-action со значением, например edit или delete, а затем присоединить обработчик события, когда вы закончите загрузку своей страницы. Затем посмотрите на первого предка, у которого есть свойство data-seq и получите его.

Как один демо говорит больше, чем тысяча слов, вот демо:

var list = document.querySelectorAll('[data-action="delete"]'); 
 
for (var i = 0; i < list.length; ++i) { 
 
    list[i].addEventListener("click", function(e){ 
 
     alert('delete ' + e.target.closest('[data-seq]').getAttribute('data-seq')); 
 
    }); 
 
} 
 

 
var list = document.querySelectorAll('[data-action="edit"]'); 
 
for (var i = 0; i < list.length; ++i) { 
 
    list[i].addEventListener("click", function(e){ 
 
     alert('edit ' + e.target.closest('[data-seq]').getAttribute('data-seq')); 
 
    }); 
 
}
table, td { 
 
    border : 1px solid #333; 
 
} 
 

 
td { 
 
    padding : 10px; 
 
}
<table> 
 
    <tr class="row_header thin_border"></tr> 
 
    <tr id="id33192010101533333" data-seq="2"> 
 
     <td>20101015</td> 
 
     <td>600</td> 
 
     <td>730</td>   
 
     <td><a href="#" data-action="delete">Click</a></td> 
 
     <td><a href="#" data-action='edit'>Click</a></td> 
 
    </tr> 
 
    <tr id="id3319201010151111" data-seq="3"> 
 
     <td>20101015</td> 
 
     <td>600</td> 
 
     <td>730</td>   
 
     <td><a href="#" data-action="delete"> <img src="https://i.stack.imgur.com/mRsBv.png?s=64&g=1"></a></td> 
 
     <td><a href="#" data-action='edit'><img src="https://i.stack.imgur.com/mRsBv.png?s=64&g=1"></a></td> 
 
    </tr> 
 
<table>

Или, если вы предпочитаете путь JQuery, вы можете заменить код JavaScript следующим текстом (гораздо проще) код:

$('[data-action="delete"]').click(function(e){ 
    alert('delete ' + $(this).closest('[data-seq]').data('seq')); 
}); 

$('[data-action="edit"]').click(function(e){ 
    alert('edit ' + $(this).closest('[data-seq]').data('seq')); 
}); 

Смотрите также this Fiddle и this Fiddle для той же демонстрации на J SFiddle, соответственно без и с jQuery.

Смежные вопросы