Для этого вы можете использовать map()
для построения массива из последних четырех символов атрибутов href
всех соответствующих элементов a
:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
<td class="lc_Cell">
<p>
<a href="thelink1234">Link #1</a>
</p>
</td>
<td class="lc_Cell">
<p>
<a href="thelink2345">Link #2</a>
</p>
</td>
<td class="lc_Cell">
<p>
<a href="thelink3456">Link #3</a>
</p>
</td>
<td class="lc_Cell">
<p>
<a href="thelink4567">Link #4</a>
</p>
</td>
</tr>
</table>
При этом, учитывая вашу цель обновить атрибуты href
для элементов a
, в этом случае имеет больше смысла предоставлять функцию для attr()
], который вы можете использовать, чтобы вернуть новое значение на основе их текущего. Примерно так:
$('.lc_Cell a').attr('href', function(i, href) {
var id = href.slice(-4);
return 'mynewlinktosendsomeoneto' + id;
});
Реляционные таблицы без первичных ключей - очень плохая вещь. Каждый ряд должен быть уникальным в некотором роде. Если ни один из ключей-кандидатов не обозначен как первичный, вся строка должна быть уникальной.
Я не уверен, почему вы должны отменить ограничение первичного ключа, но я хотел бы рассмотреть возможность сделать это, не заменяя его одним из другие ключи-кандидаты - это красный флаг, который следует изучить.
ALTER TABLE mytable DROP CONSTRAINT PK_Name
Чтобы включить его:
ALTER TABLE mytable ADD CONSTRAINT PK_Name PRIMARY KEY /* CLUSTERED */ (pk_column)
Раскомментировать CLUSTERED
если Вы хотите, чтобы ваш ПЕРВИЧНЫЙ КЛЮЧ
был кластеризован (т.е. сами строки таблицы упорядочены)
Чтобы выяснить, кластеризован ли ПЕРВИЧНЫЙ КЛЮЧ
на нет, введите:
EXEC sp_help 'mytable'
и посмотрите возвращенный набор результатов 6-го
.
Чтобы узнать, что является первичным ключом (при условии, что ваша таблица dbo.T1):
select si.name as name,
(case when (si.status & 16) > 0 then 1 else 0 end) as isclust,
si.keycnt as keycnt,
si.indid as indid
from sysindexes si
left join sysobjects so on so.id = si.id
where si.indid > 0
and si.indid < 255
and so.xtype <> 'S'
and so.id = OBJECT_ID('dbo.T1')
and (si.status & 2048) > 0
Это даст вам что-то вроде:
name isclust keycnt indid --------------------------------------------------------------- PK_T1 1 2 1
Здесь у вас есть имя первичного ключа (PK_T1 ), независимо от того, кластеризован он или нет, количество полей в нем (2) и идентификатор индекса (он понадобится вам позже).
Далее выполните следующее:
select INDEX_COL('dbo.T1', 1, 1) --returns Field1
select INDEX_COL('dbo.T1', 1, 2) --returns Field2
Это даст вам имена двух полей из индекс. Первый параметр - это имя вашей таблицы, второй - идентификатор индекса, полученный ранее, а третий - цикл от 1 до keycnt (возвращается на предыдущем шаге).
Имея эту информацию, вы сможете восстановить первичный ключ следующим образом:
ALTER TABLE dbo.T1 ADD CONSTRAINT PK_T1 PRIMARY KEY CLUSTERED (Field1, Field2)
Обновление: это может быть не так точно, как синтаксический анализ результата sp_help, упомянутого ранее (вы упустите порядок сортировки и файловая группа), но проще программно.
It may be a better idea to SELECT
your entire table into a temporary table, doing the transformation on the fly if possible, and then copying it back. And if you can't transform on the fly, it's a lot easier to add a simple integer row index as the primary key on the temporary table.
Не нарушать ограничение PKEY. ИМХО, это лучшее решение, вы избежите затрат на перестройку PKEY, а что, если вы не можете (дублировать оставшиеся)?
ИЛИ
Прочитайте схему, чтобы узнать, как перестроить ограничение PKEY, а затем используйте ранее опубликованное решение.