function clipLegend() { // STEP 1: BUILD QUERYTASK var queryURL = 'http://<myserver>/arcgis/rest/services/<myservice>/<layerID>'; var queryTask = new esri.tasks.QueryTask(queryURL); var query = new esri.tasks.Query(); query.where = "1=1"; query.outFields = ["TYPE"]; query.geometry = map.geographicExtent; query.returnGeometry = false; query.spatialRelationship = esri.tasks.Query.SPATIAL_REL_INTERSECTS; var valList = []; // run query task queryTask.execute(query, function(results){ // iterate features in result (visible features) and create a list of unique values for (r in results.features){ // get feature attributes var attr = results.features.attributes; // value var val = attr['TYPE']; // add to value list if (valList.indexOf(val) == -1) { valList.push(val); } } // done creating value list // clear Legend table $('.esriLegendLayer').html('') // STEP 2: get legend via REST API $.get('http:/<myserver>/arcgis/rest/services<myservice>/legend?f=json', function(json){ // STEP 3: compare value list to layer legend and select // label/symbol list var clipList = []; for (labels in json['layers']) { if (json['layers'][labels]['layerId'] == <layerID>){ // legend for layer var leg = json['layers'][labels]['legend']; // iterate labels for (label in leg){ if ('values' in leg[label]) { // get values for that make up current label symbology var labelVals = leg[label]['values']; /// check in which label/symbol category the feature value falls for (v in valList){ // use only label/symbol categories with a value list if (labelVals.indexOf(valList ) != -1) { // add unique label value to clip list if (!(leg[label]['label'] in clipList)) { clipList[leg[label]['label']] = leg[label]['url']; } } } } } } } // STEP 4: rebuild legend table for (c in clipList){ var url = clipList ; var img = queryURL + '/images/' + url; $('.esriLegendLayer').append('<tr><td><img src="'+ img +'"></td><td align="left">' + c + '</td></tr>'); } }, "json"); }); }