2013-04-18 3 views
0

Я использую Simple HTML DOM Parser, но не могу понять, как получить следующее:PHP Simple HTML DOM Parser найти элементы с несколькими атрибутами

Представьте меня есть это:

<td style"color:#e05206" width"22" height="58">OK</td> 
<td style"color:#e05206" width"22" height="58" align="center">NOT OK</td> 
<td style"color:#ffffff" width"22" height="58">NOT OK</td> 

I хочу быть в порядке.

Я пытался что-то вроде этого:

$results = $html->find('td[style*=color:#e05206], td[width*="22"], td[height*=58], td[!align]'); 

Я думал, что это будет правильный ответ, но это не так, потому что он применяет OR и не AND.

Я хочу получить только ОК, а не все элементы. Подводя итог, хотелось бы, чтобы td имел V И X И Y И НЕ Z. Возможно ли это?

Спасибо за ответы!

Обновление: Я не ищу, чтобы получить ОК, это может быть что-нибудь еще. Я ищу, чтобы получить тд, который имеет атрибут V = что-то и что-то X = Y = И то и не Z.

+0

Я предполагаю, что ваши делать вещи сложными, с помощью JQuery это можно легко реализовать. '$ ('td'). each (function() {if (($ ('this'). text()) == 'OK') {// сделать что-то}});' – dreamweiver

+1

Как насчет использования 'find ('td [style = "color: # e05206"]'); 'then foreach results to check: if ($ e-> hasAttribute (align) == false) {// сделать что-то}' – Turcia

+0

Im не уверен. Но попробуйте $ html-> find ('td [style * = color: # e05206] [! Align]). В jQuery вы можете комбинировать атрибуты-селектора. Простой HTML-парсер работает с jQuery-Like. –

ответ

0

Хорошо, так это то, что я сделал.

Я использовал ganon lib.

$results = $html('td[style + width + height + !align]'); 

lib заботится о многом.

https://code.google.com/p/ganon/

+0

Это, безусловно, далеко от стандартного css, поэтому я задаюсь вопросом, неплохо ли привыкнуть к нему. – pguardiario

0
var OkElement = new Array(); 
$("table tr").find("td").each(function(){ 
    tdValue = $(this).text(); 
    if(tdValue == "OK"){ 
     OkElement.push($(this).attr('id'); 
    } 
}); 

Объяснение: Здесь мы зацикливание всего Td элементов DOM, а затем проверка OK Стоимость. Для каждого цикла это указывает текущие td-элементы и получает значение td и проверяет, является ли текстовое значение ОК или нет, если это значение ОК, а затем мы вводим идентификатор td elemtnt в массив. Наконец, массив содержит только идентификаторы элементов td, которые содержат текст ОК. Примечание. Вы должны указать уникальный идентификатор для каждого элемента td.

<td id="x1" style"color:#e05206" width"22" height="58">OK</td> 
    <td id="x2" style"color:#e05206" width"22" height="58" align="center">NOT OK</td> 
    <td id="x3" style"color:#ffffff" width"22" height="58">NOT OK</td> 

Поскольку, несмотря на то, что вы получаете элемент td, вы не можете манипулировать соответствующим элементом td без идентификатора. Теперь вы получите x1 в OkElement массива теперь вы можете манипулировать этот DIV, как вы хотите Пример

for(var i=0;i<OkElement.length;i++){ 
    $("#"+OkElement[i]).attr('style','background-color : red'); 
} 

Вот в моем примере я подаю фон красный цвета для TD элементов, имеет OK

+0

Я получаю HTML из внешнего источника. Я могу только разобрать его. –

+0

может уладить предложение – VenkateshKumar

+0

о, я понял, что вы говорите, что не можете добавить идентификаторы в таблицу? – VenkateshKumar

0
var OkElement = new Array(); 
$("table tr").find("td").each(function(){ 
    tdValue = $(this).text(); 
    if(tdValue == "OK"){ 
     OkElement.push($(this).css('color') 
    } 
}); 

Explanation : Here We are looping all the td DOM Elements and then checking for OK Value. 
    for Each loop this indicates current td elements and getting the td value and checking whether text value is OK or not if it is OK value then we pushing the td elemtnt color style into array... 
    Finally array contains only #e05206 which contains OK text. 





    Now you will get #e05206 in OkElement Array now you can manipulate that tds as you wish 
    Example 
0

В идеале вы хотите быть в состоянии получить в том, что один с:

'td:not([align])[style="color:#e05206"]' 

или

'td[style="color:#e05206"]:not([align])' 

Вы не можете сделать это с помощью простого html dom, хотя, поскольку это просто.

Хорошая новость заключается в том, что вы можете сделать это с помощью phpquery.

+0

, похоже, что phpquery больше не обновляется ... Вместо этого я использовал ganon. –

+0

Неплохой выбор, но я все еще считаю, что phpquery будет лучшим на данный момент. – pguardiario

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